问题描述
我正在尝试将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}]
相同。