【发布时间】:2010-11-17 09:09:30
【问题描述】:
作为过滤过程的一部分,我想从 XML 文档中删除某些标签,但我无法修改 XML 的外观或结构。
输入的 XML 以字符串形式出现,例如:
<?xml version="1.0" encoding="UTF-8"?>
<main>
<mytag myattr="123"/>
<mytag myattr="456"/>
</main>
并且输出需要删除属性值为 456 的 mytag:
<?xml version="1.0" encoding="UTF-8"?>
<main>
<mytag myattr="123"/>
</main>
差异应该只将删除的标签显示为输入和输出之间的差异。
我研究过 SAX、StAX 和 JAXB,但似乎无法以与使用这些 API 中的任何一个输入相同的格式输出 XML。相反,它们将形成结构良好的 XML,具有适当的缩进和空格,有时会显示与输入的差异。
我当前的方法使用正则表达式,但不是很健壮,因为它没有考虑所有可能的构造上述 XML 的方法。比如要匹配属性值:
myAttr\s*=\s*"([^"]*)"
这适用于上面的示例,但对于这个 XML 标记将不起作用:
<mytag myattr=
123></mytag>
在这种情况下,正则表达式真的是最好的选择吗?
【问题讨论】: