【问题标题】:Getting text enclosed by <li> tags获取由 <li> 标签包围的文本
【发布时间】:2015-04-08 12:20:37
【问题描述】:

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

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

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

我需要获取由“li”标签括起来的值。 这是我的 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);

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

【问题讨论】:

  • 什么是异常——输入消息——当它崩溃时?

标签: c# winforms html-agility-pack


【解决方案1】:

首先,您的 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);

【讨论】:

    【解决方案2】:

    您需要先查看您的 HTML:

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

    这是无效的。你有一个div,里面有一个ol,里面有一个li,里面有一个code。但是,您正在关闭div 内的spanspan,如果完全打开的话,是在 div 之外打开的,其中包含 span 的关闭。在尝试从中提取内容之前,请确保您拥有有效的 html。并构造你的代码,如果你的代码是结构化的,我相信你会发现这个问题。

    【讨论】:

    • 异常消息说“表达式必须评估为节点集。”和@Lajos 它必须是有效的 html 这是链接seslisozluk.net
    • 在div节点内添加关闭无效。我真的不在乎seslisozluk.net。而且您的表达式未评估为节点集。那是另一个问题。无效的 HTML 是无效的 HTML,即使它来自您最喜欢的网站。
    【解决方案3】:

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

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

    【讨论】:

    • 旁注:您的 CSS 选择器表达式也可以转换为简单的 xpath:document.DocumentNode.SelectNodes("//li")
    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多