2

htmlアジリティパックを使用して、htmlファイルの表形式の情報を解析しています。

今、私はそれを行うことができ、それは機能します。

しかし、私が抽出したいテーブルが最も内側にある場合。

または、ネストされたテーブルのどの位置にあるかわかりません。ネストされたテーブルはいくつでも存在する可能性があるため、そこから列名name、addressを持つテーブルの情報を抽出します。

元。

<table>
    <table>
           <tr><td>PHONE NO.</td><td>OTHER INFO.</td></tr>
           <tr><td>
              <table>
                 <tr><td>AMOUNT</td></tr>
                 <tr><td>50000</td></tr>
                 <tr><td>80000</td></tr>
              </table>
           </td></tr>
           <tr><td>
              <table>
                 <tr><td>
                     <table>
                         <tr><td>
                              <table>
                                 <tr><td> NAME </td><td>ADDRESS</td>
                                 <tr><td> ABC  </td><td> kfks   </td>
                                 <tr><td> BCD  </td><td> fdsa   </td>
                              </table>
                         </tr></td>
                     </table>
                 </td></tr>
              </table>
           </td></tr>
        </table>

テーブルはたくさんありますが、列名name、addressのテーブルを抽出したいと思います。だから私は何をすべきですか?

4

2 に答える 2

2

ドキュメントをHtmlDocumentとしてロードします。次に、XPathクエリを使用して、他のテーブルを含まず、最初の行に「Name」を含むtdがあるテーブルを検索します。

XPathの実装はの標準的な.NET実装であるSystem.Xml.XPathため、XmlDocumentでのXPathの使用に関するドキュメントが適用されます。

HtmlDocument doc = new HtmlDocument();
doc.Load("file.html");
HtmlNode el = (HtmlNode) doc.DocumentNode.SelectSingleNode("//table[not(descendant::table) and tr[1]/td['NAME' = normalize-space()]]");

「名前」列が修正された場合は、のようなものを使用できます'Name' = normalize-space(tr[1]/td[2])

いくつかの列名に基づいてテーブルを検索しますが、最も内側のテーブル条件には基づいていません。

HtmlNode el = (HtmlNode) doc.DocumentNode.SelectSingleNode("//table[tr[1]/td['NAME' = normalize-space()] and tr[1]/td['ADDRESS' = normalize-space()]]");
于 2010-03-31T04:41:58.753 に答える
0
var table = doc.DocumentNode.SelectSingleNode("//table [not(descendant::table) and tr[1]/td[normalize-space()='ADDRESS'] ]");
于 2010-03-31T05:08:07.397 に答える