正则表达式-格式化XML

问题描述

我正在尝试将XML格式化为单行。 (使用JAVA)

我尝试使用以下正则表达式替换。

input.replaceAll(">\\s+",">").replaceAll("\\s+<","<");

但是,它也会删除元素前面和后面的空间。 真是出乎意料。

例如:

场景01

之前:<AAA>{space}{space}{space}</AAA>

之后:<AAA></AAA>

场景02

之前:<AAA>{space}{space}123{space}{space}</AAA>

之后:<AAA>123</AAA>

场景03

之前:<AAA>{space}A{space}B{space}C{space}</AAA>

之后:<AAA>A{space}B{space}C</AAA>

有什么方法可以格式化并避免上述情况?

解决方法

撒克逊解决方案:

Processor p = new Processor(false);
DocumentBuilder db = p.newDocumentBuilder();
db.setWhitespaceStrippingPolicy(WhitespaceStrippingPolicy.ALL);
XdmNode doc = db.build(new File(...));
Serializer s = p.newSerializer(new File(...));
s.serialize(doc.asSource());

通过设置Serializer对象的属性,您可以对输出的格式进行很多控制。

,

这将在标签结尾和前面的标签开始之后替换垂直空白,例如“ \ n”,“ \ r”或组合,以及其他。

input.replaceAll(">\\v+",">").replaceAll("\\v+<","<");

摘录自https://www.regular-expressions.info/shorthand.html的内容:

\v匹配“垂直空白”,其中包括在Unicode标准中被视为换行符的所有字符。与[\n\cK\f\r\x85\x{2028}\x{2029}]相同。