3

HtmlAgilityPackを使用してHTMLページのすべてのdivIDを取得するにはどうすればよいですか。すべてのIDを取得してコレクションに入れようとしています。

<p>
    <div class='myclass1'>
        <div id='f'>
        </div>  
        <div id="myclass2">
            <div id="my"><div id="h"></div><div id="b"></div></div>
        </div>
    </div>
</p>

コード:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);    
HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("div"); 

すべてのdivIDのコレクションを取得するにはどうすればよいですか?

4

2 に答える 2

3

ID だけが必要な場合は、要素ノードidのコレクションを取得する代わりに、これらの属性ノードのコレクションを取得できます。div例えば:

List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
    ids.Add(node.InnerText);
}

divこれにより、例の要素など、ID を持たない要素がスキップ<div class='myclass1'>されます。

"//div/@id"XPath 文字列です。XPath は、XML (この場合はアジリティ パック ライブラリを介した HTML) をよく扱う場合に習得するのに便利なテクノロジです。XPath は、XML ドキュメント内の一致するノードを選択できるようにする業界標準です。

  • //次のノードを現在のノードの子として、またはその子孫のいずれかで選択することを意味します。現在のノードはドキュメントのルート ノードであるため、ドキュメント内の任意の場所で一致するノードが検索されます。
  • div一致させたい要素名です。したがって、この場合、ドキュメント内のすべてのdiv要素を検索するように指示しています。
  • /子ノードが必要であることを示します。この場合、id属性はdiv要素の子であるため、最初に要素が必要であることを伝え、次に要素の子ノードのdiv1 つが必要であることを示すためにスラッシュが必要です。div
  • @idは、すべてのid属性を検索することを意味します。@記号は、要素名ではなく属性名であることを示します。
于 2012-07-17T16:35:06.743 に答える
2

Yoは、xpath構文を渡すことでdivのコレクションを取得できます

このような

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.OptionFixNestedTags=true;

    htmlDoc.Load(filePath);

 foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div"))
 {
///.. code here
 }
于 2012-07-17T16:23:44.993 に答える