这是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;
}
我得到这个字符串:
"rn rn rn rn rn Text1rn Text2"
我可以得到一个普通的文本吗?
"Text1 Text2"
您可以改用InnerText
属性:
var texts = document.DocumentNode.Descendants("div").Select(n => n.InnerText);
如果需要,可以将它们组合在一起:
var combined = string.Join(" ", texts);
过滤掉空值:
.Select(n => n.InnerText.Replace("rn", "")).Where(s => !string.IsNullOrEmpty(s));
如果您已经在所需的节点上,并且不介意将所有空格变成单个空格字符:
var htmlNodes = htmlDoc.DocumentNode.InnerText;
var normalized = Regex.Replace(htmlNodes.Trim(), @"s+", " ");
叶节点搜索,这将使元素内非空格中的空格保持不变(例如,如果您有<div><a><span></span>this needs space</a></div>
(:
var leafNodes = htmlDoc.DocumentNode.Descendants()
.Where(x => !x.ChildNodes.Any());
var trimmedInnerText = leafNodes.Select(x => x.InnerText.Trim())
.Where(x => !string.IsNullOrEmpty(x));
var outputString = string.Join(" ", trimmedInnerText);