我正在尝试在大量XML文件上使用C#的XmlReader,它们的格式都正确,除了少数选择的文件(不幸的是,我无法更改它们,因为它会破坏很多其他代码)。
错误仅来自这些令人反感的XML文件的特定部分,可以跳过它们,但是我不想停止阅读XML文件的其余部分。
不良部分看起来像这样:
<InterestingStuff>
...
<ErrorsHere OptionA|Something = "false" OptionB|SomethingElse = "false"/>
<OtherInterestingStuff>
...
</OtherInterestingStuff>
</InterestingStuff>
因此,真的,如果我可以忽略无效的标签或忽略管道符号,那我就可以了。
当我看到名称“ErrorsHere”时尝试使用XmlReader.Skip()不起作用,显然它已经提前读取了一点并引发了异常。
TLDR:如何跳过,以便可以使用XmlReader读取上面的XML文件?
编辑:
有人建议只替换'|'符号,但是XmlReader的想法是不加载整个文件,而仅遍历您想要的部分,因为我是直接从文件中读取文件,因此我无法负担读取整个文件中的内容,请替换“|”的所有实例然后再次阅读部分内容:)。
最佳答案
过去,我对此进行了一些实验。
通常,输入仅必须格式正确。当基本的XML规则被破坏时,XmlReader将进入不可恢复的错误状态。避免模式验证很容易,但这与此处无关。
您唯一的选择是清除输入,该输入可以以流方式(自定义Stream或TextReader)完成,但将需要一种轻形式的解析。如果您在有效位置没有管道符号,这很容易。
关于c# - 在格式略有错误的XML上使用C#的XmlReader,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6648948/