gpt4 book ai didi

c# - 获取模式之后没有类或 ID 的文本

转载 作者:行者123 更新时间:2023-11-30 17:48:42 24 4
gpt4 key购买 nike

我正在使用 HtmlAgiityPack .

它是一个很好的数据解析工具,但是我使用它的每个实例,我总是有一个类或 id 来瞄准,即 -

string example = doc.DocumentNode.SelectSingleNode("//div[@class='target']").InnerText.Trim();

但是我遇到了一段文本,它没有嵌套在任何特定的模式中,具有我可以瞄准的类或 id。例如。 -

<p>Example Header</p>: This is the text I want!<br>

然而,给出的示例始终遵循相同的模式,即文本将始终在 </p>: 之后和之前 <br> .

我可以使用正则表达式提取文本,但我更愿意使用敏捷包,因为其余代码也会如此。有没有办法使用包来做到这一点?

最佳答案

这个 XPath 对我有用:

var html = @"<div class=""target"">
<p>Example Header</p>: This is the text I want!<br>
</div>";
var doc = new HtmlDocument();

doc.LoadHtml(html);
var result = doc.DocumentNode.SelectSingleNode("/div[@class='target']/text()[(normalize-space())]").OuterHtml;
Console.WriteLine(result);
  • /text()选择所有作为 <div> 的直接子节点的文本节点
  • [(normalize-space())]排除所有仅包含白色的文本节点空格(此 html 示例中排除了 2 个新行:一个在 <p> 之前,另一个在 <br> 之后)

结果: enter image description here

更新一:

所有元素都必须有父元素,例如 <div>在上面的例子中。或者如果它是您正在谈论的根节点,同样的方法应该仍然有效。关键是使用/text()获取文本节点的 XPath :

var html = @"<p>Example Header</p>: This is the text I want!<br>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var result = doc.DocumentNode.SelectSingleNode("/text()[(normalize-space())]").OuterHtml;
Console.WriteLine(result);

更新二:

好的,所以你想在<p>之后选择文本节点元素和之前 <br>元素。然后你可以使用这个 XPath :

var result = 
doc.DocumentNode
.SelectSingleNode("/text()[following-sibling::br and preceding-sibling::p]")
.OuterHtml;

关于c# - 获取模式之后没有类或 ID 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com