我需要编写一个工具来处理以下格式不正确的 XML 片段,因为它在流中间包含 XML 声明。
该公司已经使用了很长时间的此类文件,因此无法更改格式。
没有可用于解析的源代码,新工具的首选平台是 .NET 4 或更新版本,最好使用 C#。
这是片段的样子:
<Header>
<Version>1</Version>
</Header>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
<Entry><?xml version="1.0"?><Detail>...snip...</Detail></Entry>
使用XmlReader并将XmlReaderSettings.ConformanceLevel设置为ConformanceLevel.Fragment,我可以<Header>
很好地阅读完整的元素。即使<Entry>
元素开始也可以,但是在读取<Detail>
信息时XmlReader
它会抛出XmlException,因为它在<?xml...?>
XML 声明中读取它并不期望在那个地方。
除了繁重的字符串操作之外,我还有哪些选择可以跳过这些 XML 声明?
由于片段可以轻松超过 100 兆字节,我宁愿不要一次将所有内容加载到内存中。但这就是它所需要的,我对此持开放态度。
我得到的异常示例:
System.Xml.XmlException: Unexpected XML declaration.
The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it.
Line ##, position ##.