Как сохранить 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> узлы? Или я должен записать некоторый рекурсивный метод, который перейдет к каждому ребенку текущего узла?

5
задан shg 11 January 2010 в 19:38
поделиться

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();
3
ответ дан 15 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: