Плохо отформатированный XML, созданный XElement.ReplaceWith () - PullRequest
0 голосов
/ 26 января 2010

Я пытаюсь заменить узел, используя ReplaceWith (), но заметил, что это приводит к плохо форматированному XML (пропускаются новые строки и отступы).

Кто-нибудь сталкивался с этой проблемой раньше?


Фрагмент кода:

[Test]
public void Test()
{
    XDocument document;

    using (var reader = XmlReader.Create("C:\\test.xml"))
    {
        // *** Running this line results in new lines OMITTED ***
        document = XDocument.Load(reader);

        // *** Running this line results in proper formatting ***
        //document = XDocument.Parse(XDocument.Load(reader).ToString());

    }

    var newNode = new XElement("Node", new XElement("SubNode"));

    document.Root.Element("Node").ReplaceWith(newNode);

    Console.Out.WriteLine("document = {0}", document);
}

Шаги для воспроизведения:

1) Создайте C: \ test.xml со следующим:

<Test>
    <Node/>
<Test>

2) Запустите фрагмент кода выше.

Это приведет к неправильному форматированию XML:

<Test>
    <Node><SubNode /></Node>
</Test>

3) Раскомментируйте эту строку:

document = XDocument.Parse(XDocument.Load(reader).ToString());

4) Запустите фрагмент снова.

Результат будет правильно отформатирован:

<Test>
  <Node>
    <SubNode />
  </Node>
</Test>

Ответы [ 2 ]

1 голос
/ 27 сентября 2012

Хотя XElement / XDocument «красиво» форматирует xml неявно при его анализе (используя .Parse ()), у него, похоже, нет метода для явной симпатичной печати его содержимого. На самом деле это было бы хорошим дополнением к .net framework.

Указанный вами взлом, хотя и не очень эффективный, это быстрый способ сделать это:

XDocument.Parse(XDocument.Load(reader).ToString());
0 голосов
/ 26 января 2010

Результат действительный XML. Новые строки и отступы не имеют значения в XML.

Если вам нужно это красиво напечатанное, вы делаете это после того, как закончите манипулировать XML.

...