0

次のような多くの要素を含むいくつかの(〜5)大きな(〜1000行)XMLファイルがあります。

<Foo Bar="Baz">
</Foo >

私はそれらすべてがこのようになることを望んでいます:

<Foo Bar="Baz" />

これを自動的に行うツールまたはスクリプトはありますか?注:一部の要素は空ではないため、自動終了タグに変更しないでください。私が気にかけている要素名は5つだけです。

4

1 に答える 1

1

または別の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変換です(空白の削除、解析時に発生します)。要素が実際に空になると、シリアライザーはそれらを自己クローズタグとして書き出す必要があります。

于 2013-03-08T19:25:03.747 に答える