【问题标题】:Xsl - How to select value from attribute whose name contains special characterXsl - 如何从名称包含特殊字符的属性中选择值
【发布时间】:2011-05-18 05:38:02
【问题描述】:

我的目的是从 google 地方获取数据。我有以下 sn-p html:

<div class="rsw-pp rsw-pp-widget">
    <div  g:type="AverageStarRating" 
        g:secondaryurls="http://maps.google.com/?cid=12948004443906002997"
        g:decorateusingsecondary="http://maps.google.com/?cid=12948004443906002997" g:groups="maps" g:rating_override="2.998000" class="rsw-stars">
    </div>
</div>

我想获得 g:rating_override 的值。我尝试使用以下 xsl

<Rating>

  <xsl:value-of 
    select="//div[@class='rsw-pp rsw-pp-widget']/div[@class='rsw-stars']/@g:rating_override" />

 </Rating>

它说'System.Xml.Xsl.XsltException: Prefix 'g' is not defined'。你能帮帮我吗?

【问题讨论】:

    标签: xslt xpath html-agility-pack


    【解决方案1】:

    您需要定义“g”命名空间。通常这是在 stylesheet 元素上完成的。

    <xsl:stylesheet 
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:g=" ... "
         version="1.0">
    

    【讨论】:

      【解决方案2】:

      如果您使用 Html Agility Pack 嵌入式 XSLT 工具,您将面临 Html Agility Pack 的两个硬性限制(至少在版本 1.3.0.0 中):

      • 对命名空间的支持有限
      • XPATH 实现不支持导航到属性(仅选择)。例如,此 XPATH "//tag1/tag2/@myatt" 不起作用。

      您可以使用 C# 代码克服这些限制,但使用纯 XPATH 不容易,因此不能使用 XSLT。

      在这些情况下,使用 Html Agility Pack 将 HTML 转换为 XML 通常更容易,然后使用标准的 .NET 类对 XML 使用常规 XSLT,而不是使用 Html Agility Pack 类对 HTML 使用 XSLT。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        相关资源
        最近更新 更多