【发布时间】:2011-05-12 23:33:16
【问题描述】:
我有数以千计的 SGML 文档,有些格式正确,有些格式不太好。我需要获取文档中的某些元素,但是每次我去加载并尝试将它们读入 XDocument、XMLDocument 甚至只是 StreamReader 时,我都会收到不同的各种 XMLException 错误。
诸如“'[' 是一个意外的标记。”之类的东西。为什么?因为我有一个像 DOCTYPE 这样的文档
<!DOCTYPE RChapter PUBLIC "-//LSC//DTD R Chapter for Authoring//EN" [] >
我了解到“[]”内部需要有一些有效的东西。同样,我不控制文档的创建,但我必须“破解”它们并获取我想要的数据。另一个例子是有一个“未封闭”的 ELEMENT,例如:
<Caption>Plants, and facilities<hardhyphen><hyphen>Inspection.</Caption>
此 XMLException 是“第 27 行的‘连字符’开始标记与‘标题’的结束标记不匹配。第 27 行,位置 58。”很明显吧?
但是问题是,您如何才能真正获得这些文档中的某些元素,而不会遇到 XMLExceptions。 SAX 解析器是正确的方式吗?我基本上想打开文档,直接找到我想要的元素(不用担心附近的格式是否正确),提取数据,然后继续。我是否应该忘记使用 XMLDocument、XDocument 进行解析,而只进行简单的字符串替换,例如
str.Replace("<hardhypen><hyphen>", "-")
然后尝试将其加载到 XML 解析器之一。有什么策略技巧吗?
【问题讨论】:
-
我可以使用 C# 或 VB.NET
-
如果格式不正确,则不是 XML,这就是您遇到的问题。您想先将 SGML 转换为 XML github.com/MindTouch/SGMLReader, mmalachowski.blogspot.com/2013/08/…
标签: xml string linq-to-xml xmldocument sgml