Как сохранить XmlDocument с несколькими настройками отступа?

Мне нужно сохранить один XmlDocument в файл с правильным отступом (Formatting.Indented), но некоторые узлы со своими дочерними элементами должны быть в одной строке (Formatting.None).

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


Изменить после ответа @Ahmad Mageed:

Я не знал, что настройки XmlTextWriter можно изменить во время записи. Это хорошие новости.

Прямо сейчас я сохраняю xmlDocument (который уже заполнен узлами, если быть точным, это страница .xaml) следующим образом:

XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
writer.Formatting = Formatting.Indented;
xmlDocument.WriteTo(writer);
writer.Flush();
writer.Close();

Конечно, это позволяет делать отступы во всех узлах. Мне нужно отключить отступы при работе со всеми узлами <Run>.

В вашем примере вы пишете XmlTextWriter "вручную". Есть ли простой способ просмотреть все узлы xmlDocument и записать их в XmlTextWriter, чтобы я мог обнаружить <Run> узлов? Или мне нужно написать какой-то рекурсивный метод, который будет обращаться к каждому дочернему элементу текущего узла?


person shg    schedule 09.01.2010    source источник
comment
@shg: я видел твой ответ. Можно ли использовать LINQ to XML? Или строго .NET 2.0? Кстати, вы должны отредактировать свой вопрос и опубликовать этот код здесь, а не публиковать его в качестве ответа, чтобы все было в одном месте, чтобы другие могли его увидеть, поскольку это дополнительная информация для вашего вопроса. Вы можете отредактировать этот пост, а затем удалить другой.   -  person Ahmad Mageed    schedule 11.01.2010
comment
@Ahmad Mageed: я никогда раньше не использовал LINQ to XML, но это вариант. Спасибо за подсказку. Я посмотрю на это поближе. Кстати, я внес предложенное вами редактирование. Я новичок в публикации вопросов в stackoverflow, так что извините за беспорядок.   -  person shg    schedule 11.01.2010


Ответы (1)


Что вы подразумеваете под «поскольку XmlTextWriter принимает настройки для всего документа?» Параметры XmlTextWriter можно изменить, в отличие от XmlWriter, установленного один раз. Аналогично, как вы используете XmlDocument? Пожалуйста, опубликуйте код, чтобы показать, что вы пробовали, чтобы другие лучше поняли проблему.

Если я правильно понял, вы можете изменить форматирование XmlTextWriter, чтобы повлиять на узлы, которые вы хотите отображать в одной строке. Как только вы закончите, вы сбросите форматирование обратно, чтобы оно было с отступом.

Например, что-то вроде этого:

XmlTextWriter writer = new XmlTextWriter(...);
writer.Formatting = Formatting.Indented;
writer.Indentation = 1;
writer.IndentChar = '\t';

writer.WriteStartElement("root");

// people is some collection for the sake of an example
for (int index = 0; index < people.Count; index++)
{
    writer.WriteStartElement("Person");

    // some node condition to turn off formatting
    if (index == 1 || index == 3)
    {
        writer.Formatting = Formatting.None;
    }

    // write out the node and its elements etc.
    writer.WriteAttributeString("...", people[index].SomeProperty);
    writer.WriteElementString("FirstName", people[index].FirstName);

    writer.WriteEndElement();

    // reset formatting to indented
    writer.Formatting = Formatting.Indented;
}

writer.WriteEndElement();
writer.Flush();
person Ahmad Mageed    schedule 10.01.2010