Написание форматированного XML с помощью XmlWriter

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

<SampleData>
  <Item Property1="AliquaXX" />
  <Item Property1="Integer" />
  <Item Property1="Quisque" />
  <Item Property1="Aenean" />
  <Item Property1="Mauris" />
  <Item Property1="Vivamus" />
  <Item Property1="Nullam" />
  <Item Property1="Nam" />
  <Item Property1="Sed" />
  <Item Property1="Class" />
</SampleData>

но я ошибаюсь, могу ли я с этим разобраться, может ли кто-нибудь помочь?


person None    schedule 23.09.2011    source источник
comment
Какой у вас код и что он выводит?   -  person µBio    schedule 24.09.2011
comment
Любопытно, почему вы хотите записать xml в изолированное хранилище вместо того, чтобы хранить только значения и создавать XML на лету?   -  person Alan    schedule 24.09.2011
comment
Вы когда-нибудь разбирались в вещах?   -  person Sam    schedule 20.10.2011


Ответы (4)


Вы можете настроить вывод xml с помощью XmlWriterSettings.

Вы не включили никакого кода, но вы можете установить XmlWriterSettings при создании XmlWriter. Вы также можете просто использовать что-то вроде:

var myXmlWriter = new XmlWriterSettings { Indent = true };
person Sam    schedule 23.09.2011
comment
это невозможно, поскольку XmlWritterSettings.Ident доступен только для чтения и при этом выдается исключение типа 'System.Xml.XmlException' - person Pablo Recalde; 02.12.2015
comment
@ r1verside мне кажется общедоступным: msdn.microsoft.com/en-us/library/. Прошло некоторое время с тех пор, как я последний раз отвечал на этот вопрос, но я почти уверен, что сам запускал код, и он работал нормально. Также обратите внимание, что ответ Джона Скита аналогичным образом устанавливает свойство Indent XmlWriterSetting. - person Sam; 03.12.2015
comment
Свойство Settings для меня остается нулевым. Используется new XmlTextWriter - person MrFox; 25.08.2016
comment
@ r1verside Создайте XmlWriterSettings перед созданием модуля записи, установите желаемые настройки, затем создайте XmlWriter и передайте настройки, XmlWriter принимает аргумент XmlWriterSettings. Я знаю, что это старая тема, но она может помочь другим людям. Да, свойство Indent, например, является общедоступным, но выдает исключение при попытке его изменить. - person Mihail Georgescu; 06.10.2016
comment
Это создает исключение: System.Xml.XmlException: 'The 'XmlWriterSettings.Indent' property is read only and cannot be set.' - person wallyk; 10.04.2018

Я подозреваю, что вам нужно создать XmlWriterSettings с желаемым поведением (отступы и т. Д.), А затем передайте это XmlWriter при создании. Просто установите _3 _ to true вполне может быть достаточно:

XmlWriterSettings settings = new XmlWriterSettings { Indent = true };
using (XmlWriter writer = XmlWriter.Create(..., settings))
{
    ...
}
person Jon Skeet    schedule 23.09.2011

Если, как и я, вы реализуете свой собственный XmlWriter, вы можете:

var myXmlWriter = new MyXmlWriter(stream, System.Text.Encoding.UTF8)
{
    Formatting = Formatting.Indented
};

или сделайте this.Formatting = Formatting.Indented в его конструкторе.

person Simon Morgan    schedule 09.07.2019

Вы можете использовать DataSet.GetXML()

Dim column As DataColumn
For Each column In DataSet.Tables.Item(0).Columns
    column.ColumnMapping = MappingType.Attribute
Next
Dim xml As String = DataSet.GetXml()

Он не связан с XmlWriter, но вы можете использовать его для форматирования XML.

person Göktürk Solmaz    schedule 23.09.2011