Как мне отредактировать XML в C # без изменения формата / интервала?

2

Мне нужно приложение, которое проходит через XML файл, изменяет некоторые значения атрибутов и добавляет другие атрибуты. Я знаю, что могу сделать это с помощью XmlDocument и XmlWriter. Однако я не хочу менять интервал документа. Есть какой-либо способ сделать это? Или, я должен сам проанализировать файл?

Теги:

2 ответа

3
Лучший ответ

XmlDocument имеет свойство PreserveWhitespace. Если вы установите значение true, будет сохраняться незначительное пробелы.

См. MSDN

ИЗМЕНИТЬ

Если я выполняю следующий код, пробелы, включая разрывы строк, сохраняются. (Это правда, что пространство вставлено между <b и />)

    XmlDocument doc = new XmlDocument();
    doc.PreserveWhitespace = true;
    doc.LoadXml(
@"<a>
   <b/>
</a>");
    Console.WriteLine(doc.InnerXml);

Вывод:

<a>
   <b />
</a>
  • 0
    Это не сохраняет все пустое пространство. Пробелы внутри элементов (т. Е. В самом элементе, а не в его теле) не сохраняются - <something/> преобразуется в <something /> .
  • 0
    Благодарю. Это то же самое, что и атрибут xml: space = "preserve", и намного чище. Но это все еще не сохраняет разрывы строк. Есть ли способ сохранить разрывы?
Показать ещё 3 комментария
0

Незначительные пробелы обычно отбрасываются или переформатируются. Поэтому, если XML файл не использует атрибут xml:space="preserve" на узлах, которые должны сохранять их точные пробелы, изменение пробела в порядке на спецификации XML.

  • 0
    Благодарю. Я поместил атрибут xml: space = "preserve" в корневой узел, и он сохраняет большую часть промежутка. Однако для узлов, которые занимают несколько строк, он помещает их в одну строку. И я заметил, что для простых тегов, которые заканчиваются на />, он вставляет пробел перед конечным тегом. Например, для узла "<UniformGrid Rows =" 1 "/>" он изменяет его на "<UniformGrid Rows =" 1 "/>". Это не имеет большого значения, но несколько строк. Есть ли способ сохранить несколько строк? Я забочусь о том, чтобы мы могли легко сравнивать изменения в управлении исходным кодом (поскольку я на самом деле изменяю XAML).
  • 0
    Нет, это не сработает с обычными классами XML, потому что пробел внутри определения узла не является частью пробела документа. Xml: space гарантирует, что все пробелы содержимого в документе сохраняются без изменений, потому что пробелы, такие как интервал между двумя тегами без текста между ними, также не являются значимыми, и все они могут быть изменены (фактически, это то, что позволяет отступ документов без изменения их значения).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню