2011-06-24 44 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的目的,你可以把它看作一個。 –

相關問題