14

私はこのようなものを持っています:

<node TEXT="   txt A   "/>
<node TEXT="

       txt X

"/>
<node>
   <html>
      <p>
        txt Y
      </p>
   </html>
</node>
<node TEXT="txt B"/>

XSLTを使用してこれを取得したい:

txt A
txt X
txt Y
txt B

@TEXT と CDATA の無駄な空白と改行をすべて削除したいと考えています。出力に構造を与える唯一の XML 入力は<node>タグです。

4

2 に答える 2

18

次の変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="*">
  <xsl:apply-templates select="@TEXT | node()"/>
</xsl:template>

<xsl:template match="node/@TEXT | text()">
  <xsl:if test="normalize-space(.)">
    <xsl:value-of select=
     "concat(normalize-space(.), '&#xA;')"/>
  </xsl:if>

  <xsl:apply-templates />
</xsl:template>

</xsl:stylesheet>

この XML ドキュメントに対して適用された場合

<t>
<node TEXT="   txt A   "/>
<node TEXT="       txt X"/>
<node>
    <html>
        <p>        txt Y      </p>
    </html>
</node>
<node TEXT="txt B"/>
</t>

必要な結果が生成されます。

txt A
txt X
txt Y
txt B

標準の XPath 関数normalize-space()の使用に注意してください。これは、先頭と末尾のスペースをすべて取り除き、他の一連のスペースをすべて 1 つのスペースだけに置き換えます。

于 2008-11-28T07:50:23.597 に答える
0

あなたはおそらくしたいです

 <xsl:strip-space elements="node"/>

ここで説明します。そして、この記事にはさらに多くの詳細があります。

于 2008-11-28T00:31:32.967 に答える