如何在解析之前可靠地清理xml文件?

时间:2016-11-05 11:08:28

标签: xml parsing

我正在使用java(dom解析器)解析来自外部源的XML文件。 我的文件“简单”,它们始终采用以下形式:

<block1><tag1>...</tag1><tag2>...</tag2></block1>
<block2><tag1>...</tag1><tag2>...</tag2></block2>
...

但是文件会因任何原因破坏解析器:

  • 非法字符&amp ;,&gt;&lt;在标签中。我通常用&amp;更换它们。等或我保护他们注入CDATA部分

  • 我必须删除的字符\ x00- \ x1f,因为它们甚至不受CDATA保护

  • 截断的标签:

  • 没有关闭的块/标签:在这种情况下我也想跳过

如何以强大的自动方式处理此错误?

1 个答案:

答案 0 :(得分:1)

首先,我们要清楚:这些不是XML文件。你不是在谈论处理XML,而是谈论处理非XML。

如果您想要可靠而强大地执行此操作,那么您需要从您希望程序接受的(非完全XML)语言的规范开始,并且还需要规范您希望如何被翻译成XML。例如,通过在某些上下文中允许未转义的&符号,您的语言可能与XML不同:您需要定义这些上下文的内容(例如,任何&符号后面没有字母或“#”;或者您可能允许使用&符号后跟名称如果名称后面没有“;”)。

显然有多种方法可以做到这一点,例如,您可以将<x>&lt</x>解释为<x>&amp;lt</x><x>&lt;</x>。只有您可以决定要解析的非XML输入中的预期含义。

一旦你有了你想要做的事情的规范,为这种非XML语言编写解析器仍然具有挑战性,但不像没有规范那样具有挑战性。但是,即使有明确而明确的规范,当然也不能保证您遇到的每个输入文件都符合您的特定准XML方言。