2017-08-24 21 views
2

私は古いxslファイルを見て、元の作者が<xsl:template>要素の数をというように定義した理由を理解しようとしています。にはmatch属性が含まれています。私の質問以下の例では<xsl:template match="title" />に関しては次のようになります。自己閉鎖xsl:templateタグ?

XML

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
    <cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
</catalog> 

XSL

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

    <xsl:template match="/"> 
     <html> 
      <body> 
       <h2>My CD Collection</h2> 
       <xsl:apply-templates/> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="cd"> 
     <p> 
      <xsl:apply-templates select="title"/> 
      <xsl:apply-templates select="artist"/> 
     </p> 
    </xsl:template> 

    <xsl:template match="title" /> 

    <xsl:template match="artist"> 
     Artist: <span style="color:#00ff00"> 
       <xsl:value-of select="."/></span> 
     <br /> 
    </xsl:template> 
</xsl:stylesheet> 

タグが自動閉鎖しているので、何も内容が明らかに存在しません<xsl:template \>にあります。これは何がポイントですか?これは、一致属性を介してtemplateに関連付けられたXMLデータを「非表示」する手法ですか?

答えて

2

セルフクローズxsl:templateタグは、マッチしたノードを抑制するのに役立ちます。これは、恒等変換と併せて一般的に使用されるため、他のすべての文字は、の出力にコピーされ、のノードは除外されます。

<xsl:template match="title" />は、たとえば、入力文書で一致する要素がtitleの場合は何も行いません。

0

<xsl:apply-templates select="title"/>を明示的に使用するスタイルシートで<xsl:template match="title" />を使用して、出力が生成されないようにしてください。 <xsl:apply-templates select="*"/>または<xsl:apply-templates/>cd親のテンプレートで使用すると、要素が出力を生成しないように、空の<xsl:template match="title" />を使用できます。

このスタイルシートでは、もちろん<xsl:apply-templates select="title"/>を削除する方が簡単です。それは頻繁に使用されている

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

は、あなたが特定の要素を変換するために、いくつかのテンプレートを追加しているとあなたが(例えば<xsl:template match="title" />)他の要素を削除するには、空のテンプレートを追加することができます恒等変換テンプレートと一緒である(たとえば、 title要素)を出力しません。

関連する問題