空白で満たされた 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 要素内で symbol に遭遇することはありませんが、PCDATA セクション内では問題なく存在でき、その正規表現はこのニュアンスを無視します。
更新:正規表現は、「先読み」機能を使用してさらに簡潔にすることができます:
$xml_string =~ s/\s+(?=<)//g; # remove the sequence of whitespace, if followed by '<'
...しかし、すべての言語がそれをサポートしているわけではありません (Perl はサポートしていますが))。