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

标签 c# html .net dom

在 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/

相关文章:

c# - 对于 C#,是否有替代 xml 文档注释的好方法?

c# - C# 中的字符串流

javascript - ng-map 在 HTML 中显示部分 map

javascript - jQuery 使用 css 滑动内容

c# - 日期时间在转换时出错

c# - 我们如何在 C# 中使用 TcpListener 发送数据?

c# - 通过 BookSleeve 使用 Redis。未知参数

html - 动态扩展 jQuery UI 按钮集以填充父 div

c# - 使用可移植类库将东部标准时间字符串转换为 UTC 日期时间

c# - ComboBox 触发器在更改 DataContext 时触发旧 DataContext