4

无论如何都可以在不遍历每个节点的情况下从 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 节点中的值。

4

2 回答 2

5

这是我写的一个扩展,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();
        }
      }
    }
  }

示例用法:

XElement element = XElement.Parse(xmlDocString);
element.TrimWhiteSpaceFromValues();
于 2014-03-08T15:50:49.837 回答
2

如果您正在使用,XMLDocument那么您可以尝试:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.preserveWhitespace = false;
xmlDocument.load("my_document.xml");

如此处所示:如何从 XmlDocument 中删除空格

于 2013-01-04T13:56:15.927 回答