htmlドキュメントからスパン値を取得する

.net c# html-agility-pack

質問

私は次のxpathは、Firefoxのxpathプラグインを使用して取得した

id('some_id')/x:ul/x:li[4]/x:span

html id('some_id')/x:ul/x:li[4] packを使用して、私はid('some_id')/x:ul/x:li[4]を取り出すことができますid('some_id')/x:ul/x:li[4]

id('some_id')/x:ul/x:li[4]/x:span

しかし、私はこのスパンの価値を得る方法を知らない。

更新

id('some_id')/x:ul/x:li[4]/x:span

受け入れられた回答

代替アプローチ(html- agility -packなし)は、 LINQ2XMLを使用することですXDocument.Descendantsメソッドを使用してspan要素を取得し、値を取得できます。

var xml = @" <div id=""some_id"">
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li>
     Some text
    <span>text I want to grab</span>
  </li>
</ul>
</div>";
var doc = XDocument.Parse(xml);
Console.WriteLine(doc.Root.Descendants("span").FirstOrDefault().Value);

コードを拡張して、 XElement.Attributeプロパティを使用して、div要素に一致するIDがあるかどうかを確認できます

var xml = @" <div id=""some_id"">
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li>
     Some text
    <span>text I want to grab</span>
  </li>
</ul>
</div>";
var doc = XDocument.Parse(xml);
Console.WriteLine(doc.Root.Descendants("span").FirstOrDefault().Value);

この解決策の1つの欠点は、XML構造(HTML、XHTML)を適切に閉じる必要があるか、そうでなければ解析が失敗することです。


人気のある回答

HTMLをLINQ2XML、HTMLAgilityPackで解析する必要はありません。そのためには、以下の方法でノードを取得する方が簡単です。

var html = @" <div id=""some_id"">
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li>
      Some text
      <span>text I want to grab</span>
    </li>
  </ul>
</div>";

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var value = doc.DocumentNode.SelectSingleNode("div[@id='some_id']/ul/li/span").InnerText;    
Console.WriteLine(value);



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ