2017-03-15 8 views
0

XSL変換にはかなり新しいですが、数時間にわたってスタックオーバーフローを検索しています。 xslスタイルシートを使ってテーブルに入れたいxml文書がありますが、ノードの値に基づいてXMLの特定の部分だけを選択したいと考えています。ここに私のXMLです:条件に基づいてフィルタリングするためにXSLを使用してテーブルにデータを挿入する

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet href="guitarsXSLStyleSheet.xsl" type="text/xsl"?> 
<guitars> 
    <guitar> 
     <model>Strat</model> 
     <year>1978</year> 
     <price>2500</price> 
    </guitar> 
    <guitar> 
     <model>Jaguar</model> 
     <year>2006</year> 
     <price>400</price> 
    </guitar> 
    <guitar> 
     <model>Strat</model> 
     <year>2015</year> 
     <price>900</price> 
    </guitar> 
    <guitar> 
     <model>Tele</model> 
     <year>1981</year> 
     <price>1200</price> 
    </guitar> 
</guitars> 

は今、私はテーブルにこのすべてを出力XSLスタイルシートを、持っている:

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

    <xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="/"> 
     <table id="guitarTable" border="1" width="200"> 
      <tr class="header"> 
       <th>Model</th> 
       <th>Year</th> 
       <th>Price</th> 
      </tr> 
      <xsl:apply-templates select="//guitar"/> 
     </table> 
    </xsl:template> 

    <xsl:template match="guitar"> 
     <tr> 
      <td> <xsl:value-of select="model" /> </td> 
      <td> <xsl:value-of select="year" /> </td> 
      <td> <xsl:value-of select="price" /> </td> 

     </tr> 
    </xsl:template> 

</xsl:stylesheet> 

さて、私が唯一、すべて表示されるでしょうテーブルを生成しようとしているとしましょうストラットのための列、しかしストラットのみ。どうすればいい?

は、私は多分<td> <xsl:value-of select="model" /> </td>

<td> <xsl:value-of select="model[text()='Strat']" /> </td>

にそれを行うだろう行を変更すると思ったが、それはまだだけ非マッチングモデルの列は空白にして、4行の長い私のテーブルを提供します、残りはまだ表示されます。これをどうやってやりますか?ありがとう!

答えて

1

変更<xsl:apply-templates select="//guitar"/>~<xsl:apply-templates select="//guitar[model = 'Strat']"/>。 StackOverflowの答えを読んでXSLTとXPathを学ぼうとすると助けになるかもしれませんが、基本的なXPathチュートリアルを出発点として、おそらくもっと良い方法です。

+0

それはトリックでした、ありがとう。私は間違いなくチュートリアルを読んでいましたが、手をつけても、これを挿入してテーブルに貼り付けることはできませんでした。クイックフォローアップは、これを部分的に一致させるだけで動作させる方法はありますか?そのような: '' – NateH06

関連する問題