为什么在使用XmlTextWriter类时对V形进行不同的编码

本文关键字:编码 XmlTextWriter 为什么 | 更新日期: 2023-09-27 18:00:30

当我调用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中,而没有将其余元素编码到Html?,更重要的是,我该如何阻止它这样做?我只想创建第一个元素。

为什么在使用XmlTextWriter类时对V形进行不同的编码

为什么作者将第一个元素编码到了Html中,而没有将其余元素编码到Html?

因为这是您唯一使用WriteValue 的地方

我该如何阻止它这样做?我只想创建第一个元素。

XML声明不是元素。这是一个处理指令。由于1.0版本和UTF-8编码是默认的,所以最简单的做法就是完全省略它。它不会对文档的意义产生影响,但可以节省时间和几个字节。

如果您真的想包含它,那么使用WriteStartDocument

不要使用WriteValue(),它会进行编码。请改用WriteProcessingInstruction。

MSDN示例:

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