使用XpathNavigator和HtmlAgilityPack查找InnerHtml值

c# html-agility-pack xpathnavigator

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的最佳方法是什麼?

一般承認的答案

我沒有使用過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 Pack的最佳文檔似乎是Source附帶的示例。不確定為什麼不在文檔中單獨下載。


熱門答案

我覺得你錯了。

我相信你所需要做的就是:

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

我找不到鏈接到您的文檔的在線副本,但您可以查看http://htmlagilitypack.codeplex.com/releases/view/44954上的文檔以獲取更多詳細信息。

此外,如果您只是閱讀XML,那麼您使用html敏捷包還是有任何理由,還是只是您的測試文件是有效的XML?



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因