1

xsl 変換で何か問題が発生していて、問題がわかりません (ええ、初心者です)。

私はxmlを持っています:

<REG_REQUEST>
    <header>
        <version/>
        <!-- many tags here -->

        <ref_dtls>
            <ref_doc_num>000111222</ref_doc_num>
            <ref_doc_date>01.01.2000</ref_doc_date>
            <ref_name>Hello world!</ref_name>
        </ref_dtls>
    </header>

    <general_info>
        <dfiState>AGRM</dfiState>
    </general_info>

    <add_info>some additional info here</add_info>
    <!-- many more tags here -->
</REG_REQUEST>

そしてxsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
    <xsl:output method="html" encoding="utf-8"/>

    <xsl:template match="header">
         <!-- template contents -->
    </xsl:template>
</xsl:stylesheet>

テンプレート自体は正常に印刷されますが、その後、xml 属性のすべての値のリストも印刷されます。テンプレートには、いくつかの html コード出力しか含まれていません。なぜこれが起こっているのかわかりません。

4

1 に答える 1

4

これは、特定のテンプレートが提供されていない場合に使用される組み込みのテンプレートが原因です。これらは次のとおりです。

  • 要素の場合、そのノードの子を処理します
  • テキストノードの場合、その値を指定します

REG_REQUESTのテンプレートを提供していないため、組み込みのテンプレートがその子を処理します。ヘッダーのテンプレートがあるので、期待どおりに機能しますが、 REG_REQUESTの他の子のテンプレートはありません。これは、デフォルトの動作が開始され、最終的に要素と属性のテキスト値が出力されることを意味します。

解決策は、 REG_REQUESTの他の子に一致するテンプレートを追加し、それらを無視して、要素に対してそれ以上の処理が行われないようにすることです。

<xsl:template match="REG_REQUEST/*[not(self::header)]" />

これにより、ヘッダー以外のすべての要素が無視されます。

于 2012-09-07T11:18:52.677 に答える