更正 XML 结束标记

问题描述

我有多个 XML 文档由于从结束标记中遗漏了“/”而意外地格式错误标签都是匹配的对,所以我们在每个文档中有 <tagname>content <tagname> 等等。文档中有层次结构,因此我们在其他标签中确实有标签(所有打开和关闭的方式都相同)。如果“/”在结束标记中,文档将正确形成。

问题:在结束标签中插入“/”的可靠且“简单”的方法是什么?

我很擅长使用 Python (3)、VB、VBA、C#、sql、REGEX 等。我希望有人可能已经遇到过这种情况并且有一个可以使用的 REGEX。

大约有 2000 个 XML 文档,全部存储在 MysqL (8) 数据库(InnoDB 表)的 LONGTEXT 字段中。

非常感谢任何帮助或指导。

青蛙

解决方法

在一般情况下,没有可靠且简单的方法可以做到这一点。它需要一个完整的递归解析器(一个能够处理递归语法的解析器)并且超出了正则表达式的能力。

如果您知道 <tagname> 元素不能嵌套,那么当您在另一个 <tagname> 中遇到 <tagname> 时,您知道它一定是错误的,并且应该是 {{1 }}。可以使用 SAX 解析器,检测嵌套的 </tagname> 事件,并替换 startElement 事件。 SAX 解析器在到达文档末尾时最终会失败,但到那时您可能已经拥有所需的所有信息。

如果标签可以嵌套,那么问题就会变得困难一个数量级,因为您现在需要先行了解哪些开始标签应该是结束标签——即便如此,也会涉及到一些猜测因素。