2011-12-08 12 views
2

こんにちは、私はXSLTが新しく、私のデータの値とともに親ノードの値を表示しようとしています。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> 

私のように、アイブ氏は、私が取得し、サブグループ「名前」の属性値を表示するにはどうすればよいの値

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My Data</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>DataName1</th> 
     <th>DataName2</th> 
     <th>DataName3</th> 
     <th>DataName4</th> 
     </tr> 
     <xsl:for-each select="DataView/Group/SubGroup"> 
     <tr> 

     <xsl:for-each select="Data"> 
       <td><xsl:value-of select="."/></td> 
     </xsl:for-each> 

     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

を歩いて、基本的なXSLを書かテーブルは次のようになります...

非常に高く評価!!

答えて

1

簡単な、短い答えは、内側for-eachループの前にちょうど次を追加することです:

<td><xsl:value-of select="@Name"/></td> 

あなたはDataView/Group/SubGroupノードのコンテキストでは、すでにしているので、あなただけ使用する必要があります属性軸指定子(@)を使用して、その属性の1つを名前で選択します。

しかし、(いつものように)これはであると思います。個々のテンプレートを使用して表現したほうがよい。 XSLTではループがほとんど必要ありません。for-each次のスタイルシートは、所望の結果を生成します。

<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> 

出力:ショート/簡単に修正し、個々のテンプレートを使用して、正しいアプローチの両方のための

<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> 
     <tr> 
      <td>NameIWant1</td> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>NameIWant2</td> 
      <td>6</td> 
      <td>7</td> 
      <td>8</td> 
      <td>9</td> 
     </tr> 
     </table> 
    </body> 
</html> 
+0

+1。 –

+0

完全にhowerverになっていただきありがとうございます。最初のテンプレートにselect = "@ Name [contains(。、NameIWant1)]"というフィルタを適用し、テンプレートmatch = "Data"テンプレートに適用する方法を教えてください。私は別のスレッドを開始する必要がありますか? – kgjunk

0
<table border="1"> 
<thead> 
    <tr bgcolor="#9acd32"> 
    <th>SubGroupName</th> 
    <th>DataName1</th> 
    <th>DataName2</th> 
    <th>DataName3</th> 
    <th>DataName4</th> 
    </tr> 
</thead> 
<tbody> 
    <xsl:for-each select="DataView/Group/SubGroup"> 
    <tr> 
    <td> 
     <xsl:value-of select="@Name"/> 
    </td> 
    <xsl:for-each select="Data"> 
      <td><xsl:value-of select="."/></td> 
    </xsl:for-each> 

    </tr> 
    </xsl:for-each> 
</tbody> 
</table> 
関連する問題