1

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 的最佳方式是什么?

4

3 回答 3

2

我没有使用 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;

仅供参考 - 关于 HTML Agility 包的最佳文档似乎是源代码中包含的示例。不知道为什么这不是文档中的单独下载。

于 2011-08-22T13:23:12.080 回答
0

像这样的东西:

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

看看XPath 语法

于 2011-08-22T13:06:48.547 回答
0

我认为你做错了。

我相信您需要做的只是以下方面的事情:

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

我找不到链接到您的文档的在线副本,但您可以查看http://htmlagilitypack.codeplex.com/releases/view/44954上的文档了解更多详细信息。

此外,如果您只是阅读 XML,那么您是否有任何理由使用 html 敏捷包,或者只是您的测试文件是有效的 XML?

于 2011-08-22T13:23:29.547 回答