2015-09-20 81 views
0

我使用的XmlWriter使用有效的XML文件作爲我的模板建立一些XML。在該文件中,我有這行:<ds:Signature>的XmlWriter無效冒號

所以,我在C#這樣做: writer.WriteStartElement("ds:Signature");

但它給我的無效字符0x3A,這是一個冒號的一個錯誤。有沒有一種方法可以讓我使用XmlWriter構建這一行xml?

回答

4

在你的榜樣,「DS」是指XML命名空間,並在正確的XML你不能沒有它聲明使用它,無論是在節點或其祖先之一,早在文件中。

XmlWriter知道命名空間,迫使你創建正確的XML。它會在您使用它們時記住名稱空間。

這意味着,你可以做到以下幾點:

using (var x = XmlWriter.Create("test.xml")) 
{ 
    x.WriteStartElement("ds", "ParentNode", "namespace"); 
    x.WriteStartElement("ds", "Signature", "namespace"); 
    x.WriteEndElement(); 
    x.WriteEndElement(); 
    x.Flush(); 
    x.Close(); 
} 

這將產生如下:

<?xml version="1.0" encoding="utf-8"?> 
<ds:ParentNode xmlns:ds="namespace"> 
    <ds:Signature /> 
</ds:ParentNode> 

這告訴別人讀取「ParentNode」和「簽名」中定義的XML名稱空間「名稱空間」,該名稱空間由xmlns:ds="namespace"屬性指定了前綴「ds」。

這是非常有用的,但是如果你想要的東西簡單,只是想和你吐出的文字,我會說只是用一種StreamWriter

using (var s = new StreamWriter("test.xml")) 
{ 
    s.WriteLine("<ds:Signature>"); 
    s.Flush(); 
    s.Close(); 
} 
+0

謝謝你一個正確的答案,另外的StreamWriter建議。 –