Html 敏捷包 Xpath

NoN*_*ame 3 c# xpath html-agility-pack

如何将此 xPath 与 Html Agility Pack 结合使用?

x路径:

//div[@class='test']/(text())[last()]
Run Code Online (Sandbox Code Playgroud)

我试过这段代码:

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='test']/(text())[last()]"))
            {
                test = node.InnerText();
            }
Run Code Online (Sandbox Code Playgroud)

网页:

<div class="test">
        <ul>
            <li><b>Test1</b>Test1 Text</li>
            <li><b>Test2</b>Test2 Text</li>
        </ul>
    </div>
Run Code Online (Sandbox Code Playgroud)

我需要提取“Test2 Text”,而不在 xPath 中指定 ul 标记。

har*_*r07 5

您可以尝试使用此 XPath :

(//div[@class='test']//text()[normalize-space()])[last()]
Run Code Online (Sandbox Code Playgroud)

//div[@class='test']//text()[normalize-space()]查找中的所有非空文本节点div。然后,[last()]仅返回所有找到的文本节点中的最后一个节点。

工作演示示例(在此处在线查看)

var html = @"<div class='test'>
<ul>
    <li><b>Test1</b>Test1 Text</li>
    <li><b>Test2</b>Test2 Text</li>
</ul>
";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNode node = doc.DocumentNode.SelectSingleNode("(//div[@class='test']//text()[normalize-space()])[last()]");
Console.WriteLine(node.InnerText);
Run Code Online (Sandbox Code Playgroud)

输出 :

Test2 Text
Run Code Online (Sandbox Code Playgroud)