0

我正在尝试编写一个验证 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>

有没有办法防止这种行为?像设置一个工作字符集或类似的东西?

4

1 回答 1

1

这两个文件是等价的,我相信所有 XML 解析器都应该将其视为等价的。

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

如果您需要在 XML 中表示绝对任意的字符,我建议您以其他形式这样做 - 例如

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

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

于 2012-08-22T21:08:18.567 回答