質問: htmlDoc.DocumentNode.SelectSingleNode("div"); ``` すべてのdivs IDのコレクションを取得するにはどうすればよいですか?
回答: IDだけが必要な場合は、 `div`要素ノードのコレクションを取得する代わりに、 `id`属性ノードのコレクションを取得できます。例えば: ``` List ids = new List(); foreach(XmlNode node in doc.SelectNodes("//div/@id")) { ids.Add(node.InnerText); } ``` この例では、 ``ようなIDを持たない`div`要素はスキップされます。 `"//div/@id"`はXPath文字列です。 XPathは、XMLを大量に扱うか、この場合はAgility Packライブラリを介してHTMLを扱うかを知るために使いやすい技術です。 XPathは、XML文書内の一致するノードを選択できる業界標準です。 * `//`現在のノードの子として、またはその子孫のいずれかで次のノードを選択することを意味します。現在のノードはドキュメントのルートノードであるため、ドキュメントのどこにでも一致するノードが見つかります。 * `div`は一致させたい要素の名前です。したがって、この場合、ドキュメント内のどこにいても`div`要素をすべて見つけるように指示しています。 * `/`は、子ノードが必要であることを示します。この場合、 `id`属性は`div`要素の子であるため、最初に`div`要素が必要な場合は、 `div`要素の子ノードの1つを指定するとスラッシュが必要です。 * `@id`は、すべての`id`属性を検索することを意味します。 `@`記号は、要素名ではなく属性名であることを示します。