2

私はxmlファイルを持っています、例えば:  

<parent>
    <notimportant1>
    </notimportant1>.    
    <notimportant2>
    </notimportant2>.   
     ....
    <child>
        <grandchild>.   
         ....
        </grandchild>
        <grandchild>
         ....
        </grandchild>. 
         ....
        <notimportant3>
        </notimportant3>
    </child>
<parent>
 

そして、xslファイルがあります:

<xsl:template match="parent">.   
      ...
      ...
     <xsl:for-each select="child">.    
         <xsl:for-each select="grandchild">
          ...
         </xsl:for-each>.    
     </xsl:for-each>
      ....
</xsl:template>

xslここで、この既存のファイルのみをインポート/インクルードできる新しいファイルを作成する必要がありますxsl

このfor-each動作をオーバーライドして、代わりに事前定義されたテキスト/リンクのみを表示できるようにすることは可能ですか?

既存のxslを変更できず、テンプレートから他のすべてを使用したい-より高い優先度で新しいxslを定義することはできません。

4

2 に答える 2

5

xsl:apply-templatesの代わりに使用する元のスタイルシートを再設計できますxsl:for-each。このようなもの:

<xsl:template match="parent">
  ...   
  ...
  <xsl:apply-templates select="child"/>
  ....
</xsl:template>

<xsl:template match="child">
   <xsl:apply-templates select="grandchild"/>    
</xsl:template>

<xsl:template match="grandchild">
   ...
</xsl:template>

次に、このスタイルシートを別のスタイルシートにインポートすると、一致するテンプレートchildまたはgrandchild必要に応じてテンプレートをオーバーライドできます。

于 2012-07-30T13:40:52.410 に答える
2

ここでの戦術は、2 番目のテンプレート マッチングを定義して、インポートされたテンプレートparentが実行されないようにすることです (インポートされたテンプレートを変更したり、一致した後にその動作を抑制したりすることはできないため)。

デフォルトでは、インポートされたテンプレートはネイティブのテンプレートより優先度が低いため、別のテンプレートを定義するだけでこれを解決できます。

priorityテンプレートに属性を与えることで、優先順位を制御することもできます。値が高いほど、ノードセットに一致する可能性が高くなります (つまり、優先度が低いノードセットには一致しません)。

テンプレート モードもオプションですが、ここで進めるには十分だと思います。

XML 変換 - xsl:template (優先度)

XSLT 要素

于 2012-07-30T13:09:21.567 に答える