XSL - Come selezionare innerhtml di un nodo

html-agility-pack xpath xslt

Domanda

Ho il seguente snippet 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>

Mi piacerebbe avere innerhtml del primo div. Il risultato atteso è:

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

Come lo posso fare? Ex <xsl:value-of select="//div[@class='rsw-pp rsw-pp-widget']/html()" /> Questo non funzionerà perché non esiste una funzione html (). Qualcuno può aiutarmi?

Risposta accettata

Usa :

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

Questo seleziona qualsiasi nodo (elemento, nodo di testo, istruzione di elaborazione o nodo di commento) che è figlio di qualsiasi elemento selezionato dall'espressione //div[@class='rsw-pp rsw-pp-widget'] .

Verifica XSLT :

Questa trasformazione:

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

se applicato sul documento XML fornito (corretto per essere ben formato):

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

seleziona e emette esattamente i nodi desiderati :

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

Risposta popolare

Come hai scoperto, XSLT non ha un metodo html() . La tua dichiarazione scelta è giusta. Se rimuovi il file /html() avrai selezionato l'elemento <div> che stai utilizzando e <xsl:value-of> genererà tutti i contenuti del nodo.

Se stai utilizzando thsi nel contesto di HtmlAgilityPacl (come lo hai taggato), segui l'approccio di Oded (con una selezione leggermente modificata):

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché