【问题标题】:How to replace xml empty tags using regex如何使用正则表达式替换 xml 空标签
【发布时间】:2018-06-19 13:17:53
【问题描述】:

我有很多需要从字符串中删除的空 xml 标记。

 String dealData = dealDataWriter.toString();
 someData = someData.replaceAll("<somerandomField1/>", "");
 someData = someData.replaceAll("<somerandomField2/>", "");
 someData = someData.replaceAll("<somerandomField3/>", "");
 someData = someData.replaceAll("<somerandomField4/>", "");

这使用了很多效率不高的字符串操作,有什么更好的方法可以避免这些操作。

【问题讨论】:

  • 你的字符串实际上是一个xml内容?您应该使用 java xml 解析器并用它删除空标签;效率会更高。
  • 您还应该指定您要删除的确切内容 - &lt;somerandomField1 /&gt;&lt;somerandomField1&gt;&lt;/somerandomField1&gt;&lt;somerandomField1 xsi:nil="true"/&gt;&lt;somerandomField1 xsi:nil="true"&gt;&lt;/somerandomField1&gt; 是空标签吗?它们都是空元素。

标签: java regex xml


【解决方案1】:

我不建议在 HTML/XML 上操作时使用正则表达式...但是对于像你这样的简单情况,也许可以使用这样的规则:

someData.replaceAll("<\\w+?\\/>", "");

测试:link

如果您还想考虑标签名称前后的可选空格:

someData.replaceAll("<\\s*\\w+?\\s*\\/>", "");

测试:link

【讨论】:

  • 我会用\s? 甚至\s* 来说明节点名之后的可能空间
  • /前面的\\的目的是什么?
  • 你说得对,谢谢(OP:你看到 xml 的正则表达式有多不恰当了吗?)
  • 除了 \w 之外,还有很多字符可能会出现。连字符只是流行的一种。
  • @laune 你必须加一个反斜杠来考虑正则表达式中的字符。由于我们使用的是 Java,因此出于同样的原因,您必须添加一个额外的反斜杠
【解决方案2】:

试试下面的代码,你可以删除所有没有空格的标签。

someData.replaceAll("","");

【讨论】:

    【解决方案3】:

    除了使用正则表达式或字符串匹配之外,您还可以使用 xml 解析器来查找空标签并将其删除。

    查看这里给出的答案:Java Remove empty XML tags

    【讨论】:

      【解决方案4】:

      如果您想删除&lt;tagA&gt;&lt;/tagA&gt;&lt;tagB/&gt;,您可以使用以下正则表达式。请注意,\1 用于支持引用匹配组。

      // identifies empty tag i.e <tag1></tag> or <tag/>
      // it also supports the possibilities of white spaces around or within the tag. however tags with whitespace as value will not match.
      private static final String EMPTY_VALUED_TAG_REGEX = "\\s*<\\s*(\\w+)\\s*></\\s*\\1\\s*>|\\s*<\\s*\\w+\\s*/\\s*>";
      

      ideone上运行代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-28
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 2012-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多