获取包含在 <li> 标签中的文本

Getting text enclosed by <li> tags

你好我的 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);

应用程序崩溃everytime.How我可以这样做吗

你需要先看看你的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。并构建你的代码,我相信如果你的代码是结构化的,你会发现这个问题。

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

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

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