2012-07-01 3 views
1

я есть этот HAP код которого пытается выбирает суб-узел из основной коллекции узловвыберите childenode из коллекции htmlagilitypack

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") 

, но мне нужно ссылку и заголовок для каждого элемента

+0

Почему вы не включать некоторые HTML в вашем посте, чтобы мы могли видеть, что вы запрашиваете против? –

+0

@SteveWellens я обновляю свой вопрос, спасибо за ответ – Smith

+0

Являются ли теги 'item' не закрытыми в вашем примере? –

ответ

1

Кажется мне, как ошибка в HtmlAgilityPack. У меня возникли проблемы только с извлечением InnerText для элемента link, а не для других. Для этого текст был найден как его брат, а не как ребенок по крайней мере.

В любом случае, это не первая ошибка, встречающаяся в HtmlAgilityPack, поэтому мы должны жить с ней :).

Альтернатива:

Используйте XmlDocument поскольку нет HTML участвует здесь. Это 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

название название

+0

, пожалуйста, посмотрите на xml снова, я тонкий элемент - прямой потомок – Smith

Смежные вопросы