Xsl - 如何从名称包含特殊字符的属性中选择值
问题描述:
我的目的是从谷歌地点获取数据。我有以下代码片段html:Xsl - 如何从名称包含特殊字符的属性中选择值
<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:前缀 'G' 没有定义'。你可以帮帮我吗?
答
您需要定义“g”命名空间。典型的做法是在stylesheet
元素上完成。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:g=" ... "
version="1.0">
答
如果您是使用HTML敏捷性包嵌入式XSLT工具,你面临两个硬盘的HTML敏捷性包的限制(至少1.3.0.0版本):
- 支持命名空间是有限
- XPATH实现不支持导航到属性(仅限选择)。例如,这个XPATH“// tag1/tag2/@ myatt”不起作用。
您可以用C#代码克服这些限制,但不能轻松使用纯XPATH,因此不能使用XSLT。
在这种情况下,使用Html Agility Pack将HTML转换为XML通常更容易,然后使用标准.NET类的XML上的常规XSLT,而不是HTML上的带有Html Agility Pack类的XSLT。