子の内部テキストを無視するノードの内部テキスト

c# html-agility-pack xpath

質問

ここで尋ねるのは簡単すぎると思うが、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;

これはテキスト全体を返します(例えば、これは選択する必要があり、これを選択する必要はありません)。助言がありますか??

受け入れられた回答

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

page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
string selText = s.InnerText; 

人気のある回答

子供の前後にテキストがある場合、 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();


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow