Encuentre el valor InnerHtml usando XpathNavigator y HtmlAgilityPack

c# html-agility-pack xpathnavigator

Pregunta

porción de 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 para obtener el último valor dentro de td, es decir, 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]");

El depurador muestra que el valor se puede evaluar de la siguiente manera, lo que es muy engorroso.

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

¿Cuál es la mejor manera de llegar a desc9?

Respuesta aceptada

No he usado el XPathNavigator pero aquí hay una solución similar con el estilo SelectNodes / SelectSingleNode y el Paquete de Agilidad HTML.

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;

FYI - La mejor documentación en el paquete de agilidad HTML parece ser las muestras incluidas con la Fuente. No estoy seguro de por qué no es una descarga separada en la documentación.


Respuesta popular

Creo que estás haciendo esto mal.

Creo que todo lo que debe hacer es algo como:

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

No puedo encontrar una copia en línea de los documentos para vincularlo, pero puede consultar los documentos que se encuentran en http://htmlagilitypack.codeplex.com/releases/view/44954 para obtener más detalles.

Además, si solo estás leyendo XML, ¿hay alguna razón por la que estás utilizando el paquete de agilidad html o es solo tu archivo de prueba el XML válido?



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow