gpt4 book ai didi

c# - 如何从 C# System.Windows.Form.HtmlElement 中提取 *immediate* 文本(即不是子文本)

转载 作者:行者123 更新时间:2023-11-28 03:28:03 27 4
gpt4 key购买 nike

在 C# 中,如何获取 System.Windows.Form.HtmlElement 的文本而不包括其子项的文本?

如果我有

<div>aaa<div>bbb<div>ccc</div><div>ddd</div></div></div>

然后整个事物的 InnerText 属性是“aaabbbcccddd”,我只想要“aaa”。

我认为这应该是微不足道的,但我还没有发现任何东西可以在 C# 中生成 HtmlElement 的“即时”文本。更可笑的想法是从父级“减去”子级的 InnerText,但对于我确信微不足道的事情来说,这是一项疯狂的工作量。

(我只想访问 HtmlElement 的文本节点。)

我非常感谢任何人可以提供的任何帮助(或指示)。

非常感谢。

例子:

<div>aaa<div>bbb<div>ccc</div><div>ddd</div></div></div>  -> Produce "aaa"
<div><div>ccc</div><div>ddd</div></div> -> Produce ""
<div>ccc</div> -> Produce "ccc"

编辑

有很多方法可以给这只猫剥皮,但没有一种很优雅。但是,鉴于我的限制(不是我的 HTML,很可能无效),我认为 Aleksey Bykov 的解决方案最接近我的需要(事实上,我确实实现了他在上一条评论中建议的相同解决方案。)

我选择了他的解决方案,并对所有其他我认为可行但对我而言并非最佳的解决方案投了赞成票。我会回来查看是否支持任何其他似乎可行的解决方案。

非常感谢。

最佳答案

也许它比这更简单,如果您愿意使用 XmlDocument 而不是 HtmlDocument - 您可以只使用 XmlElement 的“Value”属性。

此代码为您提到的 3 种情况提供了您想要的输出:

class Program
{
private static string[] htmlTests = {@"<div>aaa<div>bbb<div>ccc</div><div>ddd</div></div></div>",
@"<div><div>ccc</div><div>ddd</div></div>",
@"<div>ccc</div>" };
static void Main(string[] args)
{
var page = new XmlDocument();

foreach (var test in htmlTests)
{
page.LoadXml(test);
Console.WriteLine(page.DocumentElement.FirstChild.Value);
}
}
}

输出:

aaa

ccc

关于c# - 如何从 C# System.Windows.Form.HtmlElement 中提取 *immediate* 文本(即不是子文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898707/

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