2016-11-02 14 views
0

子ノードのテキストを表示せずに、特定のノードのテキストを表示する必要があります。私は、子ノードの空のテンプレートを作成することでこれを処理しようとしましたが、うまくいきませんでした。子ノードのテキストを抑制する方法は?ここでXSLTにいくつかのテキストノードを表示するにはどうすればいいですか?

はXMLである:ここでは

<?xml version="1.0" encoding="UTF-8"?> 
<document> 
    <item name="The Item"> 
     <richtext> 
      <pardef/> 
      <par def="20"> 
       <run>This text should </run> 
       <run>be displayed. 
        <popup><popuptext>This text should not be displayed.</popuptext></popup> 
       </run> 
      </par> 
     </richtext> 
    </item> 
</document> 

は私のスタイルシートです:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output indent="yes" method="html"/> 
    <xsl:template match="/*"> 
     <html> 
      <body> 
       <table border="1"> 
         <xsl:apply-templates/> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="item"> 
     <tr> 
      <td><xsl:value-of select="@name"/></td> 
      <td> 
       <xsl:apply-templates/> 
      </td> 
     </tr> 
    </xsl:template> 

    <xsl:template match="run"> 
     <xsl:value-of select="." separator=""/> 
    </xsl:template> 

    <xsl:template match="popuptext" /> 

</xsl:stylesheet> 

答えて

1

あなたのselect="."select="text()"には変更することができるはず...また

<xsl:template match="run"> 
    <xsl:value-of select="text()"/> 
</xsl:template> 

runからapply-templatesを実行しないので、と一致するテンプレートは不要です。

1

あなたが唯一、run要素のテキストを表示select="text()"を使用する場合:

<xsl:template match="run"> 
    <xsl:value-of select="text()" separator=""/> 
</xsl:template> 

あなたがselect="."を使用している場合、それはその子要素の内容を含むrun要素のすべてのコンテンツを選択し、 。

私はこれが100%最良の方法であるかどうかはわかりませんが、runの子要素の内容が特定のケースで表示されないようにしています。

スタイルシートの私のフルバージョンは、次のとおりです。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output indent="yes" method="html"/> 
    <xsl:template match="/*"> 
     <html> 
      <body> 
       <table border="1"> 
         <xsl:apply-templates/> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="item"> 
     <tr> 
      <td><xsl:value-of select="@name"/></td> 
      <td> 
       <xsl:apply-templates/> 
      </td> 
     </tr> 
    </xsl:template> 

    <xsl:template match="run"> 
     <xsl:value-of select="text()" separator=""/> 
    </xsl:template> 

    <xsl:template match="popuptext" /> 

</xsl:stylesheet> 
関連する問題