3

ここで質問するには単純すぎるように聞こえるかもしれませんが、html-agility-pack を使用するのはこれが初めてなので、ノードの直接の子であるノードの内部テキストを選択する方法を整理することができません。子ノードの内部テキストを無視します。

例えば

<div id="div1">
   <div class="h1"> this needs to be selected
   <small> and not this</small>
   </div>
</div>

現在、私はこれを試しています

HtmlDocument page = new HtmlWeb().Load(url);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']");
string selText = s.innerText;

これはテキスト全体を返します (例: これではなく、これを選択する必要があります)。助言がありますか??

4

2 に答える 2

3

子のdiv前後にテキストがある場合、 は複数のテキスト ノードを持つ可能性があります。同様にここで示したように、ノードのすべての直接テキスト コンテンツを取得する最善の方法は、次のようにすることだと思います。

HtmlDocument page = new HtmlWeb().Load(url);
var nodes = page.DocumentNode.SelectNodes("//div[@id='div1']//div[@class='h1']/text()");

StringBuilder sb  = new StringBuilder();
foreach(var node in nodes)
{
   sb.Append(node.InnerText);
}

string content = sb.ToString();
于 2013-02-04T03:40:41.413 に答える
2

このオプションを使用して/text()、特定のタグの直下にあるすべてのテキスト ノードを取得できます。最初のものだけが必要な場合は、それに追加[1]します。

page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
string selText = s.InnerText; 
于 2013-02-03T23:35:42.793 に答える