首页 > 解决方案 > 规范化 HtmlAgilityPack 中的空间

问题描述

这是html片段。如何获得规范化空间文本?

搜索相同的片段,但使用 Xpath//*[normalize-space()='Text1 Text2']

<div>
    <div>
        <a></a>
        <a></a>
        <div><a><span></span>Text2</a></div>
    </div>
        <div>Text2</div>
</div>

使用:

var htmlNodes = htmlDoc.DocumentNode.SelectNodes("*");

foreach (var node in htmlNodes)
{
   text += node.InnerText;
}

我得到这个字符串:

"\r\n                        \r\n                        \r\n                        \r\n                        \r\n                        Text1\r\n                    Text2"

我可以得到一个正常的文本吗?

"Text1 Text2"

标签: c#xpathhtml-agility-pack

解决方案


您可以改用InnerText属性:

var texts = document.DocumentNode.Descendants("div").Select(n => n.InnerText);

如果需要,可以将它们组合起来:

var combined = string.Join(" ", texts);

要过滤掉空值:

.Select(n => n.InnerText.Replace("\r\n", "")).Where(s => !string.IsNullOrEmpty(s));

推荐阅读