【发布时间】:2016-06-09 00:07:13
【问题描述】:
我想使用流式 xml 解析器解析“无效”xml。 我有两个选择
XmlReader.Create(...,
new XmlReaderSettings()
{
CheckCharacters = false,
ConformanceLevel = ConformanceLevel.Fragment,
ValidationFlags = System.Xml.Schema.XmlSchemaValidationFlags.None,
ValidationType = ValidationType.None
}))
第二个例子
new XmlTextReader(...) { Namespaces = false, Normalization = false })
首先是在 xml 中显示的无法识别的命名空间上失败:'...' is an undeclared prefix.
第二个是无效字符失败:XmlException: '', hexadecimal value 0x13, is an invalid character. Line ...
是否有一个选项可以结合这两种行为 (Namespaces = false && CheckCharacters = false) 以便解析不会在未定义的命名空间和无效字符上失败?
输入“xml”不能按原样更改。它也很大,无法加载到内存中。
更新 xml示例
<?xml version="1.0" encoding="UTF-8"?>
<x xmlns="http://www.w3.org/2005/Atom">
<item>
<my_ns:id>123 _0x13_here_ dd</my_ns:id>
<other_ns:value>ABC</other_ns:value>
</item>
</x>
_0x13_here_ 是 (char)'\x13'
我错了,在这里使用CheckCharacters = false 没有帮助。它只允许避免像 &#x13; 这样的内容出现异常。
【问题讨论】:
-
带有未声明命名空间前缀的 XML 不是“无效”,它的格式不正确。真的,我认为任何解析器读取它都不会很幸运。在
XmlTextReader中禁用命名空间支持只会意味着您会收到:不允许在名称中出现的错误。 -
@CharlesMager 我添加了一个 xml 示例。
XmlTextReader { Namespaces = false }能够毫无例外地读取具有该类型命名空间的 xml。 -
请看我对类似问题的回答here