我有数以千计的 SGML 文档,有些格式正确,有些格式不太好。我需要获取文档中的某些元素,但每次我去加载并尝试将它们读入 XDocument、XMLDocument 甚至只是 StreamReader 时,我都会收到不同的各种 XMLException 错误。
诸如“'[' 是一个意外的标记。”之类的东西。为什么?因为我有一个像 DOCTYPE 这样的文档
<!DOCTYPE RChapter PUBLIC "-//LSC//DTD R Chapter for Authoring//EN" [] >
而且我了解到“[]”内部需要有一些有效的东西。同样,我不控制文档的创建,但我必须“破解”它们并获取我想要的数据。另一个例子是有一个“未封闭”的元素,例如:
<Caption>Plants, and facilities<hardhyphen><hyphen>Inspection.</Caption>
此 XMLException 是“第 27 行的 '连字符' 开始标记与 'Caption' 的结束标记不匹配。第 27 行,位置 58。” 很明显,对吧?
但接下来的问题是,您如何才能在不遇到 XMLExceptions 的情况下真正获得这些文档中的某些 ELEMENTS。SAX 解析器是正确的方法吗?我基本上想打开文档,直接找到我想要的元素(不用担心附近的格式是否正确),提取数据,然后继续。我是否应该忘记使用 XMLDocument、XDocument 进行解析,而只进行简单的字符串替换,例如
str.Replace("<hardhypen><hyphen>", "-")
然后尝试将其加载到 XML 解析器之一。关于策略的任何提示?