Java正则表达式完全删除空xml节点和子节点
我正在努力寻找最好的解决办法。下面是我的XML:Java正则表达式完全删除空xml节点和子节点,java,regex,xml,replaceall,Java,Regex,Xml,Replaceall,我正在努力寻找最好的解决办法。下面是我的XML: <Dbtr> <Nm>John doe</Nm> <Id> <OrgId> <Othr> <
<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标记,然后写入值,我所能控制的就是不写入null。
现在对我来说,最好的办法是获得这样的输出xml,并用一些regexp逻辑替换它,形成一个没有空标记的xml,它可以通过模式验证 为此,您应该使用xml解析器。作为一般规则:不要使用正则表达式来重新格式化或解析xml或HTML。使用DOM解析,例如jsoup:我认为应该将该文档序列化为对象并在其上进行处理。使用正则表达式可能会破坏xml结构。虽然效率不高,但这也可以奏效。谢谢
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>