次のような多くの要素を含むいくつかの(〜5)大きな(〜1000行)XMLファイルがあります。
<Foo Bar="Baz">
</Foo >
私はそれらすべてがこのようになることを望んでいます:
<Foo Bar="Baz" />
これを自動的に行うツールまたはスクリプトはありますか?注:一部の要素は空ではないため、自動終了タグに変更しないでください。私が気にかけている要素名は5つだけです。
次のような多くの要素を含むいくつかの(〜5)大きな(〜1000行)XMLファイルがあります。
<Foo Bar="Baz">
</Foo >
私はそれらすべてがこのようになることを望んでいます:
<Foo Bar="Baz" />
これを自動的に行うツールまたはスクリプトはありますか?注:一部の要素は空ではないため、自動終了タグに変更しないでください。私が気にかけている要素名は5つだけです。
または別のXSLTプロセッサを使用している場合xsltproc
、これは非常に簡単です。これで、質問に表示されている要素の例は、テキストノード(改行文字)が含まれているため、実際には空ではありません。ただし、XSLTでは、空白のみのテキストノードを無視できる要素を指定できます。したがって、このようなスタイルシート
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="Foo Bar Baz"/>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
あなたが必要なことをする必要があります。はstrip-space
、どの要素に空白のみのテキストノードの子を削除する必要があるかを指示します。テンプレートは、入力を変更せずに出力にコピーするID変換です(空白の削除後、解析時に発生します)。要素が実際に空になると、シリアライザーはそれらを自己クローズタグとして書き出す必要があります。