2012-08-22 46 views
0

我試圖編寫一個驗證XML設置文件的函數,所以如果文件中不存在節點,它應該創建它。C#XMLDocument編碼?

我有這個功能

private void addMissingSettings() { 
    XmlDocument xmldocSettings = new XmlDocument(); 
    xmldocSettings.Load("settings.xml"); 

    XmlNode xmlMainNode = xmldocSettings.SelectSingleNode("settings"); 

    XmlNode xmlChildNode = xmldocSettings.CreateElement("ExampleNode"); 
    xmlChildNode.InnerText = "Hello World!"; 

    //add to parent node 
    xmlMainNode.AppendChild(xmlChildNode); 
    xmldocSettings.Save("settings.xml"); 
} 

但在我的XML文件,如果我有

<rPortSuffix desc="Read Suffix">&#13;&#10;</rPortSuffix> 
<wPortSuffix desc="Write Suffix">&#03;</wPortSuffix> 

當我保存文件,這樣可以節省這些行作爲

<rPortSuffix desc="Read Suffix"> 
</rPortSuffix> 
<wPortSuffix desc="Sufijo en puerto de escritura">&#x3;</wPortSuffix> 
<ExampleNode>Hello World!</ExampleNode> 

有沒有辦法來防止這種行爲?像設置一個工作字符集或類似的東西?

回答

1

這兩個文件是等價的,我認爲應該被所有的XML解析器看作是等價的。

此外,Unicode字符U + 0003不是valid XML character,所以如果您試圖在文件中表示它,則基本上會遇到其他問題。即使這個特定的.NET XML解析器似乎沒有反對,其他解析器也可以這樣做。

如果您需要在您的XML中表示絕對任意的字符,我建議您以其他形式 - 例如

<rPortSuffix desc="Read Suffix">\u000c\u000a</rPortSuffix> 
<wPortSuffix desc="Write Suffix">\u0003</wPortSuffix> 

顯然,您這時就需要適當地解析文本,但至少XML解析器不會礙事,你就可以表示任何UTF-16代碼單元。

+0

這個工程,不需要解析!那麼表示Unicode字符的正確方法就是這樣嗎? – desto

+0

兩個略微迂迴的校正:所顯示的兩個文件確實有所不同:在完成任何其他解析之前,文字x0D x0A序列將歸一化爲單個x0A,而數字字符引用將不會以相同方式歸一化。另外,對字符3的數字字符引用在XML 1.1中是合法的,儘管不在XML 1.0中。 –