我想从XML文档中删除某些标记作为过滤过程的一部分,但我无法修改XML的外观或结构。在保留其结构的同时过滤XML
的输入XML进来作为字符串例如:
<?xml version="1.0" encoding="UTF-8"?>
<main>
<mytag myattr="123"/>
<mytag myattr="456"/>
</main>
和输出需要除去mytag
其中的属性值是,比方说,456:
<?xml version="1.0" encoding="UTF-8"?>
<main>
<mytag myattr="123"/>
</main>
一个diff应显示只有被删除的标签作为输入和输出之间的差异。
我已经看过SAX,StAX和JAXB,但它看起来并不像输入任何这些API那样可以输出XML格式。它们将形成具有适当缩进和空白的结构良好的XML,有时会显示出与输入不同的结果。
我目前的方法使用正则表达式,但不是很健壮,因为它没有考虑构建上述XML的所有可能方式。例如,相匹配的属性值:
myAttr\s*=\s*"([^"]*)"
这适用于上面的例子,但将无法正常工作给予这个XML标签:
<mytag myattr=
123></mytag>
是正则表达式真的在这种情况下,最好的选择?
我会看看XSLT,但它会保留输入XML的结构。我给出的例子格式很好,但想象一下,示例XML全部在一行上。输出是否也在一条线上? – 2009-08-06 14:54:45
@Alex Spurling:这个*应该*完全不相关,XML是关于数据的,而不是关于序列化格式。为什么对你很重要? – Tomalak 2009-08-06 15:10:49
因为他使用的是不支持XML的diff工具。 – 2009-08-06 16:31:54