2011-08-22 1 views
1

de test.xmlTrouvez valeur InnerHtml en utilisant la partie XpathNavigator et HtmlAgilityPack

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

// créer XpathNavigator pour obtenir la dernière valeur à l'intérieur td desc9-à-dire

> 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]"); 

Le débogueur montre la valeur peut être évaluée comme ci-dessous ce qui est très lourd.

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

Quel est le meilleur moyen d'accéder à desc9?

Répondre

2

Je ne l'ai pas utilisé XPathNavigator mais voici une solution similaire avec le SelectNodes/style SelectSingleNode et le HTML Agility Pack.

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

OU

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

Pour votre information - La meilleure documentation sur le pack Agility HTML semble être les échantillons inclus dans la source. Je ne sais pas pourquoi ce n'est pas un téléchargement séparé dans la documentation.

+0

J'ai dû prendre tableRow.ChildNodes [17] .InnerText parce que "\ r \ n" a également été pris comme noeud enfant. Merci. – Learner

0

quelque chose comme ceci:

/table[1]/tbody[1]/tr[@class="a"]/td[last()] 

Jetez un oeil à XPath Syntax

0

Je pense que vous vous trompez.

Je crois que tout ce que vous avez besoin de faire est quelque chose le long des lignes de:

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

Je ne peux pas trouver une copie en ligne des documents pour vous établir un lien mais vous pouvez vérifier les documents trouvés à http://htmlagilitypack.codeplex.com/releases/view/44954 pour plus de détails. De plus, si vous lisez simplement du XML, y a-t-il une raison pour que vous utilisiez le pack d'agilité html ou est-ce que votre fichier de test est un fichier XML valide?

Questions connexes