以下两个代码示例演示了我在未编码或解码“无效字符”时遇到的这个问题。
var elm = new XElement("foo", "\x12")
elm.ToString();
// ArgumentException: '', hexadecimal value 0x12, is an invalid character.
同样,解析
var elm2 = XElement.Parse("<foo></foo>");
// XmlException: '', hexadecimal value 0x12, is an invalid character ..
这会在意外情况下导致意外异常 -
我怎样才能“解决”这个问题,使 XML 始终正确编码,无一例外?这个问题一般如何处理?
如果我必须在往返中保留这些“无效字符”,是否有一种标准方法可以在没有自定义编码(例如 base64)过程的情况下这样做?
此外,我惊讶地发现使用 XML 实体并没有解决问题 -不是编码编码吗?这是XML 版本之间的差异还是仅仅是一些基本的 XML 限制?
在这种情况下,可以简单地删除无效的 XML 字符,但不希望为插入到 XElement 结构中的每个文本节点手动执行操作。
这不是 XElement 唯一的问题,尽管答案可能依赖于所使用的 XElement,因为在线验证站点在第二种情况下也会拒绝 XML。