删除xml标记开头和结尾之间的空格

3
我需要一个正则表达式来去除XML标签开头和结尾之间的空格。 例如: 有人创建了XML并将其发送给我,以便我可以验证、签名并发送到Web服务。
为了做到这一点,我需要删除标签开头和结尾之间的空格: String xmlString = "<?xml version="1.0" encoding="UTF-8"?><car><name>Beatle </name>" + "<doors>2</doors><drivers><driver><name> Guilherme</name></driver>" + "<driver><name>Leonardo </name></driver></drivers></car>"; xmlString = xmlString.replaceAll("> ", ">"); xmlString = xmlString.replaceAll(" <", "<"); 是否有一种方法可以使用正则表达式将这两个替换合并成一个?

1
我非常确定你不能使用正则表达式安全地完成这个任务。特别是,任何 CDATA 块都可能会破坏程序。最好使用解析器,尤其是因为你可能想要验证文档。 - chrylis -cautiouslyoptimistic-
@chrylis,你能给我一个在这种情况下使用的例子吗? - Paolo Fernandes
2个回答

2
您可以使用这个正则表达式:
(<[^/][^>]*>) +| +(<\/[^>]+>)

(在Java中,应该像这样使用 String pattern = "(<[^/][^>]*>) +| +(<\\/[^>]+>)";)

并使用以下替换字符串:

$1$2

检查 替换全局

测试版本:

<?xml version="1.0" encoding="UTF-8"?><car><name>甲壳虫</name> <doors>2</doors><drivers><driver><name>Guilherme</name></driver> <driver><name>Leonardo</name></driver></drivers></car>

输出结果:

<?xml version="1.0" encoding="UTF-8"?><car><name>甲壳虫</name> <doors>2</doors><drivers><driver><name>Guilherme</name></driver> <driver><name>Leonardo</name></driver></drivers></car>

enter image description here


1
(>) | (<)

你可以使用 | 或操作符,并用 $1$2 进行替换。只需要一个正则表达式即可完成。

我已经使用这个模式在链接上进行了测试。如果我传递$1,当结束标记之前只有空格时,例如<tag>sadas </tag>,它会变成<tag>sadas/tag>。 - Paolo Fernandes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接