У меня есть существующий XML-документ:Форматирование XElement с закладками
<?xml version="1.0" encoding="utf-16"?>
<property_set_list>
<property_set symbol_id="TestPropertySet1">
<property symbol_id="TestName1" id="1" type="8">Test</property>
<property symbol_id="TestName2" id="2" type="8"></property>
</property_set>
<property_set symbol_id="TestPropertySet2">
</property_set>
</property_set_list>
я загрузить его и обновить и добавить некоторые свойства. Например:
Недвижимость TestName1 обновляется. Объект TestName 2 остается как есть.
В TestPropertySet2 я добавляю несколько новых свойств.
Выход документа после того, как все манипуляции заключается в следующем:
<?xml version="1.0" encoding="utf-16"?>
<property_set_list>
<property_set symbol_id="TestPropertySet1">
<property symbol_id="TestName1" id="1" type="8">qwerty</property>
<property symbol_id="TestName2" id="1" type="8">
</property>
</property_set>
<property_set symbol_id="TestPropertySet2">
<property symbol_id="localeID" id="1" type="19">1033</property>
<property symbol_id="localeID" id="2" type="19">1079</property>
</property_set>
</property_set_list>
Это код, который я использовал для загрузки и обработки документа:
using (var reader = ReaderCreator())
using (var output = OutputCreator())
using (var xmlWriter = new XmlTextWriter(output))
{
xmlWriter.Indentation = 1;
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.IndentChar = TAB;
XDoc = XElement.Load(reader, LoadOptions.None);
Namespace = "some namespace";
// some code to update properties
// adds new nodes to TestPropertySet2
foreach (var localeId in _franchise.LocaleIds)
{
TestPropertySet2.Add(
new XElement(
Namespace + "property", localeId,
new XAttribute("symbol_id", "localeID"),
new XAttribute("id", i),
new XAttribute("type", "19")
)
);
i++;
}
XDoc.Save(xmlWriter);
}
Проблема заключается TestName2 свойство на двух рядах:
<property symbol_id="TestName2" id="1" type="8">
</property>
В зависимости от того, как вы хотите, чтобы ваш окончательный XML выглядел, вы можете сохранить его с помощью ['XmlWriterSettings'] (http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings (v = vs.110) .aspx) и установка 'IndentChars' в' \ t \ t'. Это приведет к тому, что весь документ будет отложен, используя двойные вкладки. Я не знаю, можете ли вы отступать по разным разделам по-разному (без написания «XmlWriter»). Вам также нужно установить 'Indent = true' в' XmlWriterSettings'. –
После вашего редактирования: Я не знаю, почему это происходит. Я протестировал его на своем компьютере, и он никогда не разбивает теги ''. Возможно, это помогло бы, если бы вы могли опубликовать (целую) часть, где вы сохраняете файл. –
Я обновил весь пост. Надеюсь, теперь это становится яснее. Благодаря! – Mdb