验证并除去以xml任何无关的结束标记在Java
问题描述:
<Module name="IOWData">
*</VERSION>*
<ACQ> PAR </ACQ>
<RECON> PUP </RECON>
<Group name="PAR">
<HEALTHSTATUS> OK </HEALTHSTATUS>
</Group>
</Module>
我想删除任何无关的结束标记,即还没有被在XML(打开如图中示例的结束标记 - 版本标签)。
注:它可以是整个XML的任何地方的任何标签。此外,XML是巨大的我不希望加载整个XML在内存中。
以下思路我:
正则表达式:如果我可以使用正则表达式来解决这个问题。但是,如何检查关闭和打开检查的标签名称,我需要帮助。
使用XSD。但是如何?
希望我很清楚并渴望有效的解决方案。 谢谢!
答
首先,不要把它称为XML。它不是XML。如果您将其称为非XML,那么这将有助于确立设计用于处理XML的工具不会对您有任何用处的想法。
既然你要解析语言不是XML,并且没有解析器该语言当前不存在,你将不得不学习如何编写解析器[*]。这是每个计算机科学课程和任何编译器教科书都涵盖的主题,但在您阅读了一些关于该理论的内容之前,这不是一种尝试。
一旦你知道如何开始编写一个解析器,最好的办法是记下要解析的语法的BNF,这基本上是XML语法和杂散结束标记的选项。你将有一个识别标签(包括流浪者)的词法分析器,并将它们推送到一个语法分析器,它可以完成匹配标签名称的工作(尽管这在技术上是用编译器编写的术语,语义而不是语法)。然后,您只需确定流失并将其从传递到下一个处理阶段的事件流中删除,这可以是标准的SAX ContentHandler。
我希望给你你想要去爬山的大小精确的感觉。
[*]我猜你不知道太多关于这个从你以为正则表达式可以做这项工作的事实。