c# - 从所有 Xml 节点值中删除空格

标签 c# xml

有没有办法在不遍历每个节点的情况下从 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]);
  }
}

有没有更好的方法? LoadOptions.PreserveWhitespace这不是我想要的,我需要修剪 XML 节点中的值。

最佳答案

这是我为 Xml.Linq.XElement 编写的扩展,但我不确定性能。

我确实找到了这个 performance comparison of XmlDocument vs XElement when creating xml使用 XElement 显示 6 到 10 倍改进的文档。我不确定这些结果的有效性,它是在创建文档还是在元素上迭代并更新值,所以请按它的值(value)去做。

无论哪种方式,我想我都会分享一个替代方案。也许以后我自己或其他人会有动力分析这种特定用法(删除空格)的性能。

  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();
        }
      }
    }
  }

示例用法:

XElement element = XElement.Parse(xmlDocString);
element.TrimWhiteSpaceFromValues();

关于c# - 从所有 Xml 节点值中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158472/

相关文章:

mysql - 通过 Perl 脚本将带有断线的 MySQL TEXT 字段转换为 XML 会返回格式错误的符号

xml - xslt 将所有节点复制到变量

json - Flutter Dart Http XML rest转换为Json

c# - Entity Framework - 缺少列?

c# - 如何保留在使用 List.Clear() 之前已经创建的列表

C#, Foreach 中的项目

c# - 我如何实现这个公共(public)可访问枚举

xml - Powershell正则表达式替换XML标签值

c# - 跨线程操作在 Windows 窗体中无效

java - 由于名称中存在撇号而导致无效的 XPath 表达式异常