如何使用XmlReader与XmlTextReader的行为,Namespaces = false

时间:2016-06-09 00:07:13

标签: c# xml xmlreader

我想使用流式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没有帮助。它允许避免仅在&#x13;等内容上出现例外情况。

1 个答案:

答案 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 );
相关问题