我的情况是我有一个用空格填充的xml文件。
<test> <level> <sub name="xyz">test</sub> </level> <test>
我需要删除空格,但不要删除带有元素属性名称的空格,因为这会使我的标记为<subname>
。我可以递归查找空格,直到找到<
并删除它们,如果找到>
,则不删除它。我想知道是否可以通过Java中的正则表达式来实现这一点。
答案 0 :(得分:6)
不要在没有XML解析器的情况下尝试处理XML。
通过一个简单的XSLT转换:
<xsl:stylesheet ...>
<xsl:strip-space elements="*"/>
<xsl:template match="/"><xsl:copy-of select="."/></xsl:template>
</xsl:stylesheet>
答案 1 :(得分: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确实如此)。