1

ノードのメインコレクションからサブノードを選択しようとするこのhapコードがあります

Dim items As HtmlNodeCollection = doc.DocumentNode.SelectNodes("//channel/item")

 For Each item In items
   link = item.SelectSingleNode("//link")
   title = item.SelectSingleNode("//title")
 next

xmlは

<rss version="2.0">
<channel>
    <title>title title</title>
<link>http://www.link.com</link>
<description>long decription</description>
<item>
    <title>title title</title>
    <link>http://www.link.com/</link>
    <description> description</description>
    </item>
    <item>
    <title>title title</title>
    <link>http://www.link.com/</link>
    <description> description</description>
    </item>
    <item>
    <title>title title</title>
    <link>http://www.link.com/</link>
    <description> description</description>
    </item>
</channel>
</rss>

しかし、各アイテムのアイテムの下に適切なノードタイトルとリンクが表示されません。どこが間違っているのですか?

私はちょうどできたかもしれない

Dim links As HtmlNodeCollection = doc.DocumentNode.SelectNodes("//channel/item/link")
Dim titles As HtmlNodeCollection = doc.DocumentNode.SelectNodes("//channel/item/title")

しかし、各アイテムのリンクとタイトルが必要です

4

1 に答える 1

1

HtmlAgilityPack のバグのように思えます。InnerText他の要素ではなく、要素の のみを取得する際に問題がlinkありました。その場合、テキストは少なくとも子としてではなく、兄弟として見つかりました。

とにかく、これは HtmlAgilityPack で遭遇する最初のバグではないので、それと一緒に暮らす必要があります :)。

別:

XmlDocumentここには HTML が含まれていないため、 an を使用してください。それが XML です。

static void Main(string[] args)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(ConsoleApplication3.Properties.Settings.Default.RSS);

    var items = xmlDoc.SelectNodes("//channel/item");
    foreach (var item in items)
    {
        XmlNode node = (XmlNode)item;
        var link = node.SelectSingleNode("//link");
        var title = node.SelectSingleNode("//title");

        if (link != null)
        {
            Console.WriteLine(link.InnerText);
        }
        if (title != null)
        {
            Console.WriteLine(title.InnerText);
        }
    }

    Console.ReadKey();
}

出力:

http://www.link.com

タイトル タイトル

http://www.link.com

タイトル タイトル

http://www.link.com

タイトル タイトル

于 2012-07-01T14:10:37.747 に答える