Почему шеврон кодируется по-разному, когда я использую класс XmlTextWriter? - PullRequest
0 голосов
/ 24 июня 2011

Кажется, что происходит странное поведение, когда я вызываю XMLTextWriter ...

XmlTextWriter writer = new XmlTextWriter(targetFileName, Encoding.UTF8);

writer.WriteValue("< ?xml version=\"1.0\" encoding=\"UTF-8\"?>");
writer.WriteString(Environment.NewLine);
writer.WriteStartElement("video","UploadXsd");
writer.WriteString(Environment.NewLine);
    writer.WriteStartElement("title");
        writer.WriteString(Environment.NewLine);
        writer.WriteString(title);
        writer.WriteString(Environment.NewLine);
    writer.WriteEndElement();
    writer.WriteString(Environment.NewLine);
    writer.WriteStartElement("description");
    writer.WriteString(Environment.NewLine);
        writer.WriteString(description);
        writer.WriteString(Environment.NewLine);
    writer.WriteEndElement();
    writer.WriteString(Environment.NewLine);
    writer.WriteStartElement("contributor");
    writer.WriteString(Environment.NewLine);
        writer.WriteString(contributor);
        writer.WriteString(Environment.NewLine);
    writer.WriteEndElement();
    writer.WriteString(Environment.NewLine);
    writer.WriteStartElement("subject");
    writer.WriteString(Environment.NewLine);
        writer.WriteString(subject);
        writer.WriteString(Environment.NewLine);
    writer.WriteEndElement();
    writer.WriteString(Environment.NewLine);
writer.WriteEndElement();
writer.WriteString(Environment.NewLine);

writer.Flush();
writer.Close();

Тогда я вижу, что он создает это:

&lt; ?xml version="1.0" encoding="UTF-8"?&gt;
<video xmlns="UploadXsd">
<title>
MyTitle
</title>
<description>
MyDescription
</description>
<contributor>
MyContributor
</contributor>
<subject>
MySubject
</subject>
</video>

Почему писатель закодировал первый элемент в Html, а не остальные? И, более того, как мне остановить это при этом? Я просто хочу создать первый элемент.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Почему писатель закодировал первый элемент в Html, а не остальные?

Потому что это единственное место, которое вы использовали WriteValue

как мне это остановить? Я просто хочу создать первый элемент.

Объявление XML не является элементом. Это инструкция по обработке. Поскольку версия 1.0 и кодировка UTF-8 используются по умолчанию, самое простое, что нужно сделать, это просто полностью ее опустить. Это не повлияет на значение документа, но сэкономит ваше время и несколько байтов.

Если вы действительно хотите включить его, используйте WriteStartDocument

0 голосов
/ 24 июня 2011

Не используйте WriteValue(), это кодировка.Вместо этого используйте WriteProcessingInstruction.

Пример MSDN :

XmlWriter writer = XmlWriter.Create("output.xml");
writer.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-16'");
writer.WriteStartElement("root");
writer.Close();
...