我有一个充满空格的 xml 文件的情况。
<test> <level> <sub name="xyz">test</sub> </level> <test>
我需要删除空格,但不是元素属性名称的空格,因为这会使我的标记为<subname>
. 我可以递归地查找空格,直到找到<
并删除它们,如果找到>
则不删除它。我想知道是否可以通过 Java 中的正则表达式来做到这一点。
切勿尝试在没有 XML 解析器的情况下处理 XML。
只需通过一个简单的 XSLT 转换即可:
<xsl:stylesheet ...>
<xsl:strip-space elements="*"/>
<xsl:template match="/"><xsl:copy-of select="."/></xsl:template>
</xsl:stylesheet>
如果真的那么简单,这应该足够了:
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 支持))。