написание пустого элемента xml в c # с использованием xmlwriter - PullRequest
0 голосов
/ 11 октября 2011

Я использую xmlwriter для редактирования XML-файлов, но мне нужно, чтобы он поддерживал определенный формат для будущих сравнений с другими XML-файлами.

Я использую следующий код для написания пустых элементов:

w.WriteStartElement("description");
w.WriteEndElement();

результат в XML-файле:

<description />

, что обычно будет нормально, но мне нужно, чтобы это выглядело так:

<description/>

без пробела после «описания».

Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

XML не является текстом. Правила разные. В общем, вы не можете использовать сравнение текста для сравнения файлов XML. Два приведенных вами примера - идентичный XML, но, как вы заметили, это другой текст.

Вы можете начать подходить к этому, предварительно обработав сравниваемые файлы, чтобы выполнить такие вещи, как размещение всех атрибутов в одном порядке, возможно, по одному атрибуту на строку; размещая элементы в каноническом порядке, используя один и тот же префикс для того же пространства имен и т. д. Затем вы должны указать инструменту сравнения текста игнорировать пробелы и т. д.

2 голосов
/ 11 октября 2011

Обе эти формы являются действительными XML, и любая система, которую вы используете, сможет анализировать обе формы, чтобы не был анализатором XML.

Я сейчас не за компьютером, но чувствую, что это сработает:

Var myModifiedXmlString = w.ToString().Replace(" />", "/>");
1 голос
/ 11 октября 2011

Посмотрите на XmlWriter.WriteRaw, например:

w.WriteRaw("<description/>");
...