Найти значение InnerHtml, используя XpathNavigator и HtmlAgilityPack - PullRequest
1 голос
/ 22 августа 2011

часть 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>

// создаем XpathNavigator для получения последнего значения внутри td, т.е. 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]");

Отладчик показывает, что значение можно оценить, как показано ниже, что очень громоздко.

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

Как лучше всего добраться до desc9?

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

Я не использовал XPathNavigator, но вот аналогичное решение со стилем SelectNodes / SelectSingleNode и пакетом HTML Agility Pack.

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

ИЛИ

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

FYI - TheЛучшая документация по пакету HTML Agility - это примеры, включенные в Source.Не уверен, почему это не является отдельной загрузкой в ​​документации.

0 голосов
/ 22 августа 2011

Я думаю, вы ошибаетесь.

Я считаю, что все, что вам нужно сделать, это что-то вроде:

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

Я не могу найти онлайн копиюиз документов, чтобы связать вас, но вы можете проверить документы, найденные в http://htmlagilitypack.codeplex.com/releases/view/44954 для получения дополнительной информации.

Также, если вы просто читаете XML, есть ли причина, по которой вы используете html agility packили это только ваш тестовый файл, который является действительным XML?

0 голосов
/ 22 августа 2011

примерно так:

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

Взгляните на Синтаксис XPath

...