我正在使用java(dom解析器)解析来自外部源的XML文件。 我的文件“简单”,它们始终采用以下形式:
<block1><tag1>...</tag1><tag2>...</tag2></block1>
<block2><tag1>...</tag1><tag2>...</tag2></block2>
...
但是文件会因任何原因破坏解析器:
非法字符&amp ;,&gt;&lt;在标签中。我通常用&amp;更换它们。等或我保护他们注入CDATA部分
我必须删除的字符\ x00- \ x1f,因为它们甚至不受CDATA保护
截断的标签:
没有关闭的块/标签:在这种情况下我也想跳过
如何以强大的自动方式处理此错误?
答案 0 :(得分:1)
首先,我们要清楚:这些不是XML文件。你不是在谈论处理XML,而是谈论处理非XML。
如果您想要可靠而强大地执行此操作,那么您需要从您希望程序接受的(非完全XML)语言的规范开始,并且还需要规范您希望如何被翻译成XML。例如,通过在某些上下文中允许未转义的&符号,您的语言可能与XML不同:您需要定义这些上下文的内容(例如,任何&符号后面没有字母或“#”;或者您可能允许使用&符号后跟名称如果名称后面没有“;”)。
显然有多种方法可以做到这一点,例如,您可以将<x><</x>
解释为<x>&lt</x>
或<x><</x>
。只有您可以决定要解析的非XML输入中的预期含义。
一旦你有了你想要做的事情的规范,为这种非XML语言编写解析器仍然具有挑战性,但不像没有规范那样具有挑战性。但是,即使有明确而明确的规范,当然也不能保证您遇到的每个输入文件都符合您的特定准XML方言。