Trova il valore InnerHtml utilizzando XpathNavigator e HtmlAgilityPack

c# html-agility-pack xpathnavigator

Domanda

porzione di test.xml

<tr class="a"> 
    <td align="left" nowrap="true">desc1</td> 
    <td align="left">desc2</td>  
    <td>desc3</td>  
    <td align="left">desc4</td> 
    <td align="left">desc5</td>
    <td>desc6</td> 
    <td>desc7</td> 
    <td>desc8</td>
    <td class="nr">desc9</td>
</tr>

// crea XpathNavigator per ottenere l'ultimo valore all'interno di td ie desc9

> HtmlDocument document = new HtmlDocument();
        document.Load(Server.MapPath("test.xml"));

        XPathNavigator xPathNavigator = document.CreateNavigator();
        object o = xPathNavigator.Evaluate("/table[1]/tbody[1]/tr[2]/td[9]");

Il debugger mostra che il valore può essere valutato come di seguito che è molto macchinoso.

((HtmlAgilityPack.HtmlNodeNavigator)((new System.Linq.SystemCore_EnumerableDebugView(((MS.Internal.Xml.XPath.XPathSelectionIterator)(o)))).Items[0])).Value

Qual è il modo migliore per arrivare a desc9?

Risposta accettata

Non ho usato XPathNavigator, ma qui è una soluzione simile con lo stile SelectNodes / SelectSingleNode e HTML Agility Pack.

string xPathSearch = "/table[1]/tbody[1]/tr[2]";
HtmlNode tableRow = doc.DocumentNode.SelectSingleNode(xPathSearch);
string description9 = tableRow.ChildNodes[9].InnerText;

O

string xPathSearch = "/table[1]/tbody[1]/tr[2]/td[9]";
HtmlNode tableColumn = doc.DocumentNode.SelectSingleNode(xPathSearch);
string description9 = tableColumn.InnerText;

Cordiali saluti - La migliore documentazione sul pacchetto Agilità HTML sembra essere gli esempi inclusi con la fonte. Non sono sicuro del motivo per cui non è un download separato nella documentazione.


Risposta popolare

Penso che stai andando su questo sbagliato.

Credo che tutto ciò che dovresti fare sia qualcosa del tipo:

document.DocumentNode.SelectSingleNode("/table[1]/tbody[1]/tr[2]/td[9]");

Non riesco a trovare una copia online dei documenti per collegarti, ma puoi consultare i documenti disponibili all'indirizzo http://htmlagilitypack.codeplex.com/releases/view/44954 per ulteriori dettagli.

Inoltre, se stai leggendo solo XML c'è qualche ragione per cui stai usando il pacchetto agility html o è solo il tuo file di test che è XML valido?



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é