HtmlAgilityPack - 特定のテーブルを読み込む方法 - C#4.0

c# html-agility-pack

質問

C#4.0とhtmlagilitypackを使用すると、どのようにして特定のテーブルの中の値を読み取ることができますか?私は10のテーブルがあり、6番目の値を読みたい、またはテーブルIDがあると言うことができます。

または、私は特定のtdの後に来るtd値を読みたいと言うことができます。

または特定のdivまたは要素またはテキストの後にテーブルが来る。これらは可能ですか?

受け入れられた回答

あなたが尋ねたことはすべて、比較的簡単に行うことができます。ドキュメントが不足していることは問題ではなく、XMLとネットワークのXmlDocument実装と使用方法と機能の両方に似ている必要があります。

特定のテーブル内の値を読み取るにはどうすればよいですか? 10個のテーブルがあり、6番目の値を読みたい、またはテーブルIDがあるとします。

6番目のテーブルを見つける:

// XPath
var table6 = doc.DocumentNode.SelectSingleNode("//table[6]");

// LINQ
var table6 = doc.DocumentNode.Descendants("table").Skip(5).FirstOrDefault();

テーブル/要素をIDで検索する:

var myTable = doc.GetElementById("myTable");

// XPath
var myTable = doc.DocumentNode.SelectSingleNode("//table[@id='myTable']");
var myTable = doc.DocumentNode.SelectSingleNode("//*[@id='myTable']");

// LINQ
var myTable = doc.DocumentNode
    .Descendants("table")
    .Where(table => table.Attributes.Contains("id"))
    .SingleOrDefault(table => table.Attributes["id"].Value == "myTable");
var myTable = doc.DocumentNode
    .Descendants()
    .Where(e => e.Attributes.Contains("id"))
    .SingleOrDefault(e => e.Attributes["id"].Value == "myTable");
var myTable = doc.DocumentNode
    .Descendants("table")
    .SingleOrDefault(table => table.GetAttributeValue("id", null) == "myTable");
var myTable = doc.DocumentNode
    .Descendants()
    .SingleOrDefault(e => e.GetAttributeValue("id", null) == "myTable");

あるtdの後にtdの値を読みたいとしましょう。

// XPath
var certainTd = table6.SelectSingleNode("//td[2]");
var tdAfterCertainTd = certainTd.SelectSingleNode("following-sibling::td[1]");

// LINQ (not so easy)
var certainTd = table6.Descendants("td").Skip(1).FirstOrDefault();
var tdAfterCertainTd = certainTd.NextSibling;
while (tdAfterCertainTd != null)
{
    if (tdAfterCertainTd.Name == "td")
        break;
    tdAfterCertainTd = tdAfterCertainTd.NextSibling;
}

特定のdivまたは要素またはテキストの後にテーブルがあります。

// XPath
var certainDiv = doc.DocumentNode.SelectSingleNode("//div[1]");
var tableAfterCertainDiv = certainDiv.SelectSingleNode("following-sibling::table[1]");

// LINQ (not so easy)
var certainDiv = doc.DocumentNode.Descendants("div").FirstOrDefault();
var tableAfterCertainDiv = certainDiv.NextSibling;
while (tableAfterCertainDiv != null)
{
    if (tableAfterCertainDiv.Name == "table")
        break;
    tableAfterCertainDiv = tableAfterCertainDiv.NextSibling;
}

いくつかのパターンに気づくはずです。



Related

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