【问题标题】:HTML Agility Pack - Select node after particular paragraphHTML Agility Pack - 在特定段落之后选择节点
【发布时间】:2019-05-17 08:18:03
【问题描述】:

我有这种情况:各种文件的HTML如下。我只需要在“targetWord”段落之后检索列表(当然它会改变我需要解析的页面中的位置)。如何使用 HTML Agility Pack?

<p>Word1</p>
<ul>
<li>listobject1</li>
<li>listobject2</li>
<li>listobject3</li>
</ul>

<p>targetWord</p>
<ul>
<li>listobject4</li>
<li>listobject5</li>
<li>listobject6</li>
</ul>

<p>Word2</p>
<ul>
<li>listobject7</li>
<li>listobject8</li>
<li>listobject9</li>
</ul>

我只需要用我的代码获取 targetWord 之后的列表节点:

foreach (var node in retreivedNodes)
{
    s[i] = node.InnerText;
    i++;
    console.writeline (s[i]);
}

OUTPUT:

   listobject4
   listobject5
   listobject6

【问题讨论】:

    标签: c# .net html-agility-pack


    【解决方案1】:

    您需要制作一个 xpath 表达式以满足您的要求

    假设我已经用你的 sn-p 加载了一个 HAP.HtmlDocument 作为 var htmlSnippet 然后

    htmlSnippet.DocumentNode.SelectNodes('//p[text()="targetWord"]/following-sibling::ul[1]//li')
    

    将返回目标词 p 标记之后的第一个 ul 节点的 li 子节点集。

    【讨论】:

    • 它昨天在我的项目中工作。现在我迁移到另一个项目,我得到“System.Xml.XPath.XPathException: 'Namespace Manager or XsltContext required. This query has a prefix, variable, or user-defined function.'”你能帮帮我吗?
    • 有帮助,有帮助。我不能肯定地告诉你发生了什么,但我猜你正在寻找的项目中有一个冒号,它认为它是一个 XML 命名空间限定符......所以了解 XML 命名空间?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2018-06-13
    • 2011-09-05
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多