Ich habe folgendes HTML-Snippet:
<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>
Ich würde gerne innerhtml von der ersten div bekommen. Das erwartete Ergebnis ist:
<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>
Wie kann ich das machen? Ex <xsl:value-of select="//div[@class='rsw-pp rsw-pp-widget']/html()" />
Das wird nicht funktionieren, weil es keine html () -Funktion gibt. Könnte mir jemand helfen?
Verwenden :
//div[@class='rsw-pp rsw-pp-widget']/node()
Dadurch wird ein beliebiger Knoten (Element, Textknoten, Verarbeitungsanweisung oder Kommentarknoten) ausgewählt, der ein Kind eines Elements ist, das durch den Ausdruck //div[@class='rsw-pp rsw-pp-widget']
.
XSLT-Verifizierung :
Diese Umwandlung:
<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>
wenn es auf das bereitgestellte XML-Dokument angewendet wird (korrigiert, um gut gebildet zu werden):
<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>
selektiert und gibt genau die gewünschten Knoten aus :
<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 "/>
Wie Sie herausgefunden haben, hat XSLT keine html()
-Methode. Ihre Select-Anweisung ist genau richtig. Wenn Sie die /html()
entfernen, haben Sie das <div>
-Element ausgewählt, das Sie verwenden, und <xsl:value-of>
wird den gesamten Inhalt des Knotens ausgeben.
Wenn Sie thsi im Kontext von HtmlAgilityPacl verwenden (wie Sie es getaggt haben), dann folgen Sie Oded's Ansatz (mit einer leicht modifizierten Auswahl):
var outerDivNode = doc.DocumentNode.SelectSingleNode("//div[@class='rsw-pp rsw-pp-widget']");
var innerDivText = outerDivNode.InnerHtml;