修改xml文件而不更改特殊字符

时间:2013-12-10 13:00:58

标签: c# xml

我有一个结构为的XML文件:

 <?xml version='1.0'?>
 <a>
   <b>
      <d>
         <LineCode>0</LineCode>
         <LineName>Metro</LineName>
         <LineDescription>Test C&#38;C all countries with MCFM</LineDescription>
      </d>
      .......
      <e>.....</e>
      <f>....</f>
  </b>
 </a>

在此文件中,我添加了以下代码部分:

                XElement newElement = new XElement("e",
                    new XElement("e1", "test1"),
                    new XElement("e2", "test2"),
                    new XElement("e3", "test3 ));

                doc.Root.Element("a").Element("d").AddAfterSelf(newElement);
                doc.Save(file.Directory + "//" + file.Name);

运行此代码后,修改了初始XML文件中使用的所有特殊字符。 例如,第一行成为:

  <?xml version="1.0" encoding="utf-8"?>

行成了:

 <LineDescription>Test C&amp;C all countries with MCFM</LineDescription>

如何在不修改现有字符的情况下在我的XML文件中添加新部分?或者如何在不修改现有特殊字符的情况下保存?

2 个答案:

答案 0 :(得分:1)

==观察#1 ==

<!-- Before: -->
<?xml version='1.0'?>

<!-- After: -->
<?xml version="1.0" encoding="utf-8"?>

说明:如果省略encoding属性,utf-8 is the default

==观察#2 ==

<!-- Before: -->
&#38;

<!-- After: -->
&amp;

说明:用于表示ampersand XML实体等同于

==摘要==

  

新文件将由其他应用程序使用,并且可能存在   可能是阅读或处理新文件的问题。

表现良好的 XML处理软件应该以同等的方式处理您的文档之前和之后。因此,如果您在阅读或处理新编辑的XML文件时遇到问题,那么这些问题确实应该得到解决。但是你可能没有预料到的那类问题。

答案 1 :(得分:1)

如果处理文件的代码应该处理标准XML,那么存储字符的形式无关紧要。原始文件使用字符的数字代码,而新保存的文件使用标准实体名称。这同样适用于XML标题行 - version ='1.0'和version =“1.0” - 应该被视为完全相同,并且附加元素仅标识在写入文件时使用的字符集。

如果您的其他应用程序使用的是标准XML解析器,或者能够读取标准XML的自定义解析器,则修改后的XML应该没有问题。您可能遇到的唯一问题是,如果这些其他应用程序无法读取标准XML(即它们假设所有值都使用单引号,或者它们没有正确处理XML标准实体等) - 在这种情况下,您可能需要使用在发送到这些应用程序的任何文件上过滤解析器,以确保满足这些要求。 (即一个简单的SAX解析器,当使用附加限制触发事件时写出文件)