Удалить пустое пространство из всех значений Xml Node

Как бы то ни было, чтобы обрезать передние и конечные пробелы из значений XML node без циклического перехода через каждый node.

Например, <someelement> value here </someelement> станет <someelement>value here</someelement>

Следующий код делает это, но я не хочу прокручивать каждый node, который был бы поражен производительностью:

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.

2 ответа

Вот расширение, которое я написал для Xml.Linq.XElement, но я не уверен в производительности.

Я нашел это сравнение производительности XmlDocument vs XElement при создании XML-документов, показывающее улучшение 6x - 10x с использованием XElement. Я не уверен, насколько достоверны эти результаты. И он создает документ против итерации по элементам и обновляет значения, поэтому возьмите его за то, что он стоит.

В любом случае, подумал, что я поделюсь альтернативой. Возможно, позже у меня или у кого-то будет мотивация для анализа производительности этого конкретного использования (удаление пробелов).

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


Если вы используете XMLDocument, вы можете попробовать:

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

Как показано здесь: Как удалить пробелы из XmlDocument

licensed under cc by-sa 3.0 with attribution.