2011-05-18 70 views
0

我的目的是從谷歌地點獲取數據。我有以下代碼片段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' 沒有定義'。你可以幫幫我嗎?

回答

1

您需要定義「g」命名空間。典型的做法是在stylesheet元素上完成。

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

如果您是使用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。

相關問題