2012-01-10 7 views
0

別のスレッドでは、別の開発者が以下のすばらしい回答を提供してくれました。2つのテンプレートにフィルタを適用する方法

基本的に2つのテンプレートを使用して、テーブルに表示する必要があるすべてのデータを取得します。

私の質問は今、どのテンプレートを両方のテンプレートにフィルタリングするフィルタを適用するのですか?私は正常にxsl:template match="SubGroup"xsl:value-of select="@Name[contains(.,NameIWant1)]"を使用することができますが、それを得る方法を理解することはxsl:template match="Data"に適用されます。私は無駄にさまざまな名前の方法を使用しようとしました。

おかげさまで、皆さんは私にlearnig XSLTの大きな助けとなっています!キロ

サンプルXML

<?xml-stylesheet type="text/xsl" href="Sample.xsl"?> 
<DataView Client="Client1" ID="1000" TimeStamp="12/7/2011 5:35:09 PM"> 
<Group ID="5000" Name="GroupName1"> 
<SubGroup ID="7000" Order="0" Name="NameIWant1"> 
<Data ID="1" Name="DataName1" Order="0">1</Data> 
<Data ID="2" Name="DataName2" Order="0">2</Data> 
<Data ID="3" Name="DataName3" Order="0">3</Data> 
<Data ID="12" Name="DataName4" Order="0">4</Data> 
</SubGroup> 
<SubGroup ID="8000" Order="0" Name="NameIWant2"> 
<Data ID="1" Name="DataName1" Order="0">6</Data> 
<Data ID="2" Name="DataName2" Order="0">7</Data> 
<Data ID="3" Name="DataName3" Order="0">8</Data> 
<Data ID="12" Name="DataName4" Order="0">9</Data> 
</SubGroup> 
</Group> 
</DataView> 

Sample.xslt:私はこれを取得

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <h2>My Data</h2> 
       <table border="1"> 
        <tr bgcolor="#9acd32"> 
         <th>Subgroup</th> 
         <th>DataName1</th> 
         <th>DataName2</th> 
         <th>DataName3</th> 
         <th>DataName4</th> 
        </tr> 
        <xsl:apply-templates/> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 
    <xsl:template match="SubGroup"> 
     <tr> 
      <td><xsl:value-of select="@Name"/></td> 
      <xsl:apply-templates/> 
     </tr> 
    </xsl:template> 
    <xsl:template match="Data"> 
     <td><xsl:apply-templates/></td> 
    </xsl:template> 
</xsl:stylesheet> 

...

____________________________ 
NameIWant1 | 1 | 2 | 3 | 4 | 
      | 6 | 7 | 8 | 9 | 
私は..取得したいと思い

____________________________ 
NameIWant1 | 1 | 2 | 3 | 4 | 
次いで

<xsl:template match="SubGroup[contains(@Name, 'NameIWant1')]"> 
    <tr> 
     <td><xsl:value-of select="@Name"/></td> 
     <xsl:apply-templates/> 
    </tr> 
</xsl:template> 

空のテンプレートと他のすべてのSubGroupの要素を無視:210

+0

あなたは 'NAME'属性に基づいて、表示する' SubGroup'年代フィルタにしようとしていますか? –

+0

はいサブグループに名前があります – kgjunk

+0

私は理解していると思います。私の答えを見てください。あなたがしようとしているものでないなら、私に知らせてください。私はそれを修正します。 –

答えて

0

名によってSubGroup年代をフィルタリングする最も簡単な方法は、このように、一致パターンに発現を移動させることである

<xsl:template match="SubGroup"/> 

コンプリートスタイルシート:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <h2>My Data</h2> 
       <table border="1"> 
        <tr bgcolor="#9acd32"> 
         <th>Subgroup</th> 
         <th>DataName1</th> 
         <th>DataName2</th> 
         <th>DataName3</th> 
         <th>DataName4</th> 
        </tr> 
        <xsl:apply-templates/> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 
    <xsl:template match="SubGroup[contains(@Name, 'NameIWant1')]"> 
     <tr> 
      <td><xsl:value-of select="@Name"/></td> 
      <xsl:apply-templates/> 
     </tr> 
    </xsl:template> 
    <xsl:template match="SubGroup"/> 
    <xsl:template match="Data"> 
     <td><xsl:apply-templates/></td> 
    </xsl:template> 
</xsl:stylesheet> 
+1

これは完全に機能します。あなたの専門知識のためにlwburkに再度ありがとう。私は最初のXSLTブックLOLを注文しました – kgjunk

関連する問題