Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#XML文档编码?_C#_Xml_Xmldocument - Fatal编程技术网

C#XML文档编码?

C#XML文档编码?,c#,xml,xmldocument,C#,Xml,Xmldocument,我试图编写一个验证XML设置文件的函数,因此,如果文件上不存在节点,它应该创建它 我有这个功能 private void addMissingSettings() { XmlDocument xmldocSettings = new XmlDocument(); xmldocSettings.Load("settings.xml"); XmlNode xmlMainNode = xmldocSettings.SelectSingleNode("settings");

我试图编写一个验证XML设置文件的函数,因此,如果文件上不存在节点,它应该创建它

我有这个功能

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>

;
你好,世界!

有没有办法防止这种行为?像设置工作字符集之类的吗?

我认为这两个文件是等效的,所有XML解析器都应该将其视为等效的

此外,Unicode字符U+0003不是一个字符,因此如果您试图在文件中表示它,则基本上会遇到其他问题。即使那个特定的.NETXML解析器似乎不反对,其他解析器也可能反对

如果您需要在XML中表示绝对任意的字符,我建议您使用其他形式—例如

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

显然,您随后需要适当地解析该文本,但至少XML解析器不会碍事,而且您将能够表示任何UTF-16代码单元。

这是可行的,不需要解析!因此,表示Unicode字符的正确方法是这样的?两个稍微迂腐的更正:显示的两个文件确实略有不同:在完成任何其他解析之前,文本x0D x0A序列将被规范化为单个x0A,而数字字符引用将不会以相同的方式规范化。此外,对字符3的数字字符引用在XML 1.1中是合法的,但在XML 1.0中不是。