C#XML文档编码?
我试图编写一个验证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");
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"> </rPortSuffix>
<wPortSuffix desc="Write Suffix"></wPortSuffix>
当我保存文档时,它将这些行保存为
<rPortSuffix desc="Read Suffix">
</rPortSuffix>
<wPortSuffix desc="Sufijo en puerto de escritura"></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中不是。