无论如何,是否可以在不遍历每个节点的情况下从 XML 节点值中修剪前导和尾随空格。
例如<someElement> value here </someElement>会变成<someElement>value here</someElement>
以下代码执行此操作,但我不想遍历每个会影响性能的节点:
if (node.ChildNodes.Count == 0)
node.InnerText = node.InnerText.Trim();
else
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
TrimLeadingOrTrailingSpacesFromNodeValue(node.ChildNodes[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?这LoadOptions.PreserveWhitespace不是我要找的,我需要修剪 XML 节点中的值。
这是我写的一个扩展,Xml.Linq.XElement但我不确定性能。
在创建 xml文档时,我确实发现了 XmlDocument 与 XElement 的性能比较,使用 XElement 显示了 6 到 10 倍的改进。我不确定这些结果的有效性,并且它是创建文档与迭代元素和更新值,因此请考虑它的价值。
无论哪种方式,我想我会分享一个替代方案。也许以后我自己或其他人会有动力分析这种特定用法的性能(删除空格)。
public static class XElementExtensions
{
/// <summary>
/// Trims whitespace from the xml node values.
/// DOES NOT trim whitespace outside of values, can use PreserveWhitespace LoadOption when parsing for that.
/// </summary>
/// <param name="element"></param>
public static void TrimWhiteSpaceFromValues(this XElement element)
{
foreach (var descendent in element.Descendants())
{
if (!descendent.HasElements)
{
descendent.SetValue(descendent.Value.Trim());
}
else
{
descendent.TrimWhiteSpaceFromValues();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
示例用法:
XElement element = XElement.Parse(xmlDocString);
element.TrimWhiteSpaceFromValues();
Run Code Online (Sandbox Code Playgroud)
如果您正在使用XMLDocument那么您可以尝试:
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.preserveWhitespace = false;
xmlDocument.load("my_document.xml");
Run Code Online (Sandbox Code Playgroud)