2011-06-24 22 views
0

似乎有一些有趣的行为去,当我打电话的XmlTextWriter上...当我使用XmlTextWriter类时,为什么chevron编码不同?

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,但不是其余?,更重要的是,如何阻止它这样做?我只想创建第一个元素。

回答

0

不要使用WriteValue(),它的编码。改用WriteProcessingInstruction。

MSDN example

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

这是伟大的感谢将在一分钟内接受 – Exitos

1

为什么作者将第一个元素编码为Html,而其余的则不是?

因为它只是你用来WriteValue

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

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

如果你真的想包括它,然后用WriteStartDocument

+0

酷,我已经它更改为:writer.WriteRaw( “<?XML版本= \” 1.0 \ “编码= \ ”UTF-8 \“?>”); – Exitos

+0

其实XML声明也不是一个处理指令,但是为了这个API的目的,你可以把它看作一个。 –

相关问题