获取<li>标签所包含的文字</li>

时间:2015-04-08 12:20:38

标签: c# winforms html-agility-pack

嗨这就是我的html文件的样子

   <div class="panel-body sozluk">
                    <ol>
                        <li>kitap <code>isim</code> </li>

</span>             </ol>
    </div>

我需要获得&#34; li&#34;所包含的值。标签。 这是我的Xpath

//*[@id="wrap"]/div[2]/div[5]/div/div/div[1]/div[1]/div/div[1]/div[2]

这是我到目前为止所尝试的

HtmlAgilityPack.HtmlDocument document = new  HtmlAgilityPack.HtmlDocument();
document.Load("word.html");

var v =  document.DocumentNode
                 .SelectNodes("//[@id='wrap']/div[2]/div[5]/div/div/div[1]/div[1]/div/div[1]/div[2]/ol ")
                 .Select(x => x.ChildNodes["li"].InnerText);

应用程序每次都崩溃。我该怎么做

3 个答案:

答案 0 :(得分:0)

您需要先查看HTML:

   <div class="panel-body sozluk">
                    <ol>
                        <li>kitap <code>isim</code> </li>

</span>             </ol>
    </div>

这是无效的。您有div,其中有ol,其中有li,其中有code。但是,您要在span内关闭div。如果span完全打开,div会在span之外打开,其中包含{{1}}的结束。在尝试从中提取内容之前,请确保您具有有效的html。并构建您的代码,我相信如果您的代码是结构化的,您会发现这个问题。

答案 1 :(得分:0)

您的HTML有点混乱,但如果您不介意使用其他软件包, 使用Fizzler for HTMLAgilityPack,这将允许您使用类似jquery的选择器来获取它们而不是xpath。

var liList = document.DocumentNode.QuerySelectorAll("li");

答案 2 :(得分:0)

首先,您的XPath无效,因为它在开头缺少星号(*):

var v =  document.DocumentNode
                 .SelectNodes("//[@id='wrap']/div[2]/div[5]/....")
                                ^here, right after '//'

这种冗长的XPath很脆弱,总是喜欢按id或class或其他属性选择元素,可能的例子:

var v =  document.DocumentNode
                 .SelectNodes("//*[@id='wrap']//div[@class='panel-body sozluk']/ol/li")
                 .Select(o => o.InnerText);