2011-02-25 1 views
3

XElement.Save на самом деле делает то, что мне нужно, но он запускает файл с:Как опустить объявления xml при использовании XElement.Save?

<?xml version="1.0" encoding="utf-8"?> 

Есть ли способ, чтобы предотвратить это?

Должен ли я сохранять другие типы, методы после того, как я закончил создание своего XElement?

Или я должен пропустить эту линию через XmlReader.Read? Поскольку я делаю это, я чувствую, что он более хрупкий, поскольку я предполагаю, что первая строка всегда будет этим объявлением xml.

Какой самый простой способ выполнить это?

+0

почему вы хотите оставить, что из? –

+0

Спасибо, Джон, теперь мне не нужно думать, потому что ваш способ чтения xml работал. В противном случае у меня возникла ошибка с моим методом, опубликованным в другом вопросе. –

ответ

5

XElement.ToString() не будет добавлять объявление XML к выходу. Но я не понимаю, почему XmlReader - или любой синтаксический анализатор XML - будет иметь проблемы со стандартным объявлением XML.

+0

Спасибо, когда я использовал читателя, он выдает исключение, говорящее: недопустимый корень данных, строка 1 и т. Д. –

+0

Я видел очень похожую ошибку, вызванную знаком порядка байтов в начале файла. Возможно, стоит исследовать. – Jon

2

Использование XmlWriter даст вам эту возможность.

Статья Microsoft: Serializing with an XML Declaration описывает, как контролировать, генерирует ли сериализация объявление XML.

0

Этот пример записывает пример XMLTree данные в текстовый файл data.xml без декларации линии, но включает в себя отступа форматирования:

XElement xmlTree = new XElement("Root", 
    new XAttribute("Attribute1", 1), 
    new XElement("Child1", 1), 
    new XElement("Child2", 2) 
); 
using (var writer = XmlWriter.Create("data.xml", new XmlWriterSettings { OmitXmlDeclaration = true, Indent = true })) 
    xmlTree.Save(writer);