2

我有一个充满空格的 xml 文件的情况。

<test>  <level>    <sub name="xyz">test</sub>   </level>  <test>

我需要删除空格,但不是元素属性名称的空格,因为这会使我的标记为<subname>. 我可以递归地查找空格,直到找到<并删除它们,如果找到>则不删除它。我想知道是否可以通过 Java 中的正则表达式来做到这一点。

4

2 回答 2

6

切勿尝试在没有 XML 解析器的情况下处理 XML。

只需通过一个简单的 XSLT 转换即可:

<xsl:stylesheet ...>
  <xsl:strip-space elements="*"/>
  <xsl:template match="/"><xsl:copy-of select="."/></xsl:template>
</xsl:stylesheet>
于 2012-05-11T11:52:49.203 回答
2

如果真的那么简单,这应该足够了:

my $xml_string = '<test>  <level>    <sub name="xyz">test</sub>   </level>  </test>';

# remove all whitespace before '<' symbol
$xml_string =~ s/\s+</</g;

print $xml_string; 
# echoes <test><level><sub name="xyz">test</sub></level></test>

我用过 Perl 语法,但我想将它转换成你想要的任何语言都很容易。

但是请注意,有几个警告(在这种情况下总是如此)。

例如,您不会<在 XML 元素中遇到符号 - 但它可以愉快地存在于 PCDATA 部分中,并且该正则表达式忽略了这种细微差别。

更新:正则表达式可能会通过“前瞻”功能变得更加简洁:

$xml_string =~ s/\s+(?=<)//g; # remove the sequence of whitespace, if followed by '<' 

...但并非所有语言都支持(虽然 Perl 支持))。

于 2012-05-11T10:19:45.253 回答