嗨这就是我的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);
应用程序每次都崩溃。我该怎么做
答案 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);