XSL - 如何選擇節點的innerhtml

html-agility-pack xpath xslt

我有以下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>

我想獲得第一個div的innerhtml。預期的結果是:

<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>

我怎樣才能做到這一點? Ex <xsl:value-of select="//div[@class='rsw-pp rsw-pp-widget']/html()" />這不起作用,因為沒有html()函數。誰能幫助我?

一般承認的答案

使用

//div[@class='rsw-pp rsw-pp-widget']/node()

這將選擇任何節點(元素,文本節點,處理指令或註釋節點),該節點是由表達式//div[@class='rsw-pp rsw-pp-widget']選擇的任何元素的子元素。

XSLT驗證

這種轉變:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:copy-of select=
     "//div[@class='rsw-pp rsw-pp-widget']/node()"/>
 </xsl:template>
</xsl:stylesheet>

當應用於提供的XML文檔 (更正為正確)時:

<div class="rsw-pp rsw-pp-widget">
    <div xmlns:g="g:g"
        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>

選擇並輸出所需的節點

    <div xmlns:g="g:g" 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 "/>

熱門答案

正如您所發現的,XSLT沒有html()方法。你的選擇陳述恰到好處。如果刪除/html()您將選擇<div>元素,並使用<xsl:value-of>將輸出所有節點的內容。

如果您在HtmlAgilityPacl的上下文中使用thsi(因為您已標記它),請遵循Oded的方法(略微修改選擇):

var outerDivNode = doc.DocumentNode.SelectSingleNode("//div[@class='rsw-pp rsw-pp-widget']");
var innerDivText = outerDivNode.InnerHtml;



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因