すべてのコメントとhtml、head、bodyなどを含むDOMをWebブラウザーにそのまま表示したいのですが、その構造は保持されています。現在、ノードhtmlからのみ開始できます。Document.Allは役に立ちませんでした。私が見ることができる唯一の方法はwebBrowser1.Document.Bodyですが、コメントやヘッドなどが見当たらないでしょう。次にDocument.Allを使用すると、すべてのノードが得られます。
4 に答える
必要なものを取得するためのWebBrowserコントロールの唯一の選択肢は、を使用することだと思いますDocument.All
。これにより、トップレベルだけでなくすべての要素が提供されますが、各要素には.Parent
要素プロパティがあるため、要素をループして(またはLinqを使用して)、親要素を持つ要素<body>
または<head>
親要素として要素を取得する要素のみを取得できます。
HTMLAgilityPackを使用してみてください。Xpathをサポートしているため、必要に応じて任意のノードを取得できます。
hienvd_csuitが示唆しているように、HTMLAgilityPackが最良の選択肢だと思います。それでもを使用したい場合、考えられる解決策は、 (。NET 4以降が必要)WebBrowser
を使用して、管理されていないDOMに直接アクセスすることです。dynamic
たとえば、次のようなことができます。
dynamic dom = wb.Document.DomDocument;
foreach (dynamic node in dom.childNodes)
{
Console.WriteLine ("{0} - {1} - {2}", node.nodeType, node.nodeName, node.nodeValue);
}
もちろん、インテリセンスは動的オブジェクトでは機能しないため、DOMの構造を知っておく必要があります。あなたはそれについてのいくつかの情報をここで見つけることができます。
特定のアイテムに子ノードがあるかどうかを照会できる必要があります(どこかにプロパティがあります)。また、それが親ノードであるかどうか、または特定のアイテムに親があるかどうか、およびあるかどうかを照会できます。 、破棄すると、item.parent.parentなどの親のクエリを続行できます(plsはintellisenseで正確なオブジェクト/プロパティ名を確認します)。何も返されない場合は、親が1つしかないことを意味します(item.parentは何も返さないと仮定します)。 、およびノードの深さがいくつのレベルであるかを整理できます。したがって、子または親のチェック方法(または両方)に基づいて、コレクションに含めるか、破棄するかを選択できます。
もちろん、トップレベルのノード/アイテムとして多くの「P」タグまたはDIV/SPANタグを取得する場合があります。だから、私はあなたがこれらを望まない可能性があると思いますので、それらを捨てて彼らの子供たちに質問してください。