我想使用流式xml解析器解析'invalid'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
没有帮助。它允许避免仅在
等内容上出现例外情况。
答案 0 :(得分:0)
这是一个组合的解决方案:
- 多个根元素(ConformanceLevel.Fragment)
- 未定义的前缀(AddNamespace)
var settings = new XmlReaderSettings() {
NameTable = new NameTable(),
ConformanceLevel = ConformanceLevel.Fragment
};
var nsmgr = new XmlNamespaceManager(settings.NameTable);
nsmgr.AddNamespace("MyNamespace", "http://exemple.com");
var context = new XmlParserContext(null, nsmgr, null, XmlSpace.Default);
var reader = XmlReader.Create(stream, settings, context );