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スタイルとHTMLAgilityPackを使用した同様のソリューションがあります。

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;

参考までに-HTMLAgilityパックに関する最良のドキュメントは、ソースに含まれているサンプルのようです。なぜそれがドキュメントの個別のダウンロードではないのかわかりません。

于 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 に答える