xml文档中的非法字符

Tob*_*zer 6 .net xml

我有一个程序,它从数据库中的数据生成Xml文件.在简短的代码中,它执行以下操作:

string dsn = "a db connection string";
XmlDocument d = new XmlDocument();
using (SqlConnection con = new SqlConnection(dsn)) {
    con.Open();
    string sql = "select id as Id, comment as Comment from Test where ... ";
    using (SqlCommand cmd = new SqlCommand(sql, con)) {
        DataSet ds = new DataSet("EXPORT");
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds, "Test");
        d.LoadXml(ds.GetXml());
    }
}
d.Save(@"c:\test.xml");
Run Code Online (Sandbox Code Playgroud)

当我查看xml文件时,它包含无效字符&#x 1 A;

<EXPORT>
  <Test>
    <Id>2</Id>
    <Comment> Keyboard NB&#x1A;5 linked</Comment>
  </Test>
</EXPORT>
Run Code Online (Sandbox Code Playgroud)

firefox浏览器无法打开此xml文件,说无效字符...

该实体在ISO 8859-1和CP1252中保留,不应由浏览器呈现.但是为什么XmlDocument输出的xml无法被解析为有效 - 或者它是一个有效的xml文档,它无法被浏览器解析或由Excel导入等等......是否有一种简单的方法可以摆脱那个保留的'无效字符'或以浏览器没有问题的方式编码它们?

非常感谢你的意见和tipps

lav*_*nio 3

并非所有字符都可以用 XML 表示。

在 XML 1.0 中,除了 TAB (0x09)、LF (0x0A) 和 CR (0x0D) 之外,不能使用值小于 0x20 的字符。

在 XML 1.1 中,几乎可以使用除 NUL (0x00) 之外的任何内容。

如果您可以选择使用 XML 1.1,并且接收程序支持 XML 1.1(支持的不多),那么您可以将 0x1A 转义为&#26;&#x1A;

将其包裹起来CDATA也不是解决方案;CDATA只是一种与标准 & 机制不同的转义字符组的便利。

否则,您需要在序列化之前将其删除。