使用HtmlAgilityPack C#从多个ul获取li值

时间:2014-01-17 16:22:06

标签: c# html-agility-pack

此查询适用于某些国家/地区,例如Germany

"//h2[span/@id='Cities' or span/@id='Other_destinations']" + "/following-sibling::ul[1]" + "/li";

HTML的格式为:

<h2>
<span id='Other_destination'></span>
</h2>
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>

但是,在像Afghanistan这样的国家/地区,Div的格式如下:

<h2>
    <span id='Other_destination'></span>
    </h2>
<ul
<li>...</li>
</ul>
<ul>
<li>...</li>
</ul>

所以问题就变成了,我如何处理像阿富汗这样的国家的事件"/following-sibling::ul[1]" + :/li"只获得Div ='Other_destinations'中的第一个ul?我希望能够解决这个问题将有助于解决我在其他国家遇到的其他异常和格式问题。谢谢。

1 个答案:

答案 0 :(得分:1)

我希望这段代码可以解决您的问题:

var xpath = "//ul[preceding-sibling::h2[span/@id='Cities' or span/@id='Other_destinations'] and following-sibling::h2[span/@id='Get_in']]" + "/li";

var doc = new HtmlDocument
{
   OptionDefaultStreamEncoding = Encoding.UTF8
};

// You need to call a WebClient here and set to the html variable.    
var html = String.Empty;

doc.LoadHtml(html);

using (var write = new StreamWriter("testText.txt"))
{
    foreach (var node in doc.DocumentNode.SelectNodes(xpath))
    {
        var all = node.InnerText;

        //Writes to text file
        write.WriteLine(all);
     }
 }        

上述XPath可以翻译为:

  • 选择ulh2[span/@id='Cities' or span/@id='Other_destinations']之间的所有h2[span/@id='Get_in']]代码

我发现所有网页在决赛中都有一个span标记,id='Get_in'

我希望它能解决你的问题。