我正在努力寻找最佳解决方案。以下是我的XML:
<Dbtr>
<Nm>John doe</Nm>
<Id>
<OrgId>
<Othr>
<Id/>
</Othr>
</OrgId>
</Id>
</Dbtr>
这应该像下面这样替换:
<Dbtr>
<Nm>John doe</Nm>
</Dbtr>
因此,应该省略所有空节点和没有任何值的子节点。 我正在使用以下表达,并且它不按照我的意愿工作
docStr = docStr.replaceAll("<(\\w+)></\\1>|<\\w+/>", "");
任何帮助都会非常感激。
编辑: 我正在创建这个XML(而不是解析它),这将被发送到清算所,由于这个空标记,清算中心将拒绝这个xml消息。我创建这个xml的方式不在我的手中我只是提供db的值,你可以看到一些值是空的,这段代码(我没有控制权)已经写出了xml标签,然后写了价值,我能控制的就是不写&#34; null&#34;。 对我来说最好的选择是获得像这样的输出xml并用一些regexp逻辑替换它并形成一个没有空标签的xml,它可以通过模式验证。
答案 0 :(得分:0)
String xml = ""
+ "<Dbtr>"
+ " <Nm>John doe</Nm>"
+ " <Id>"
+ " <OrgId>"
+ " <Othr>"
+ " <Id/>"
+ " </Othr>"
+ " </OrgId>"
+ " </Id>"
+ "</Dbtr>";
while (true) {
String repl = xml.replaceAll("<(\\w+)>\\s*</\\1>|<\\w+/>", "");
if (repl.length() == xml.length())
break;
xml = repl;
}
System.out.println(xml);
// -> <Dbtr> <Nm>John doe</Nm> </Dbtr>