2012-03-11 6 views
0

サンプルXMLファイルに対して自分のXSLTをテストしようとしていました。 しかし、出力には空のタグしか含まれません。基本的なXSLTのテスト時条件タグ

私はそれが失敗すると信じています<when test="self::text()"> 私はそれがテキストだったら、それは価値を印刷すると思いました。

何が問題になったのか教えてください。


XMLファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="xslt2.xslt"?> 

<library> 
<book><page>30</page></book> 
<book>fun</book> 
</library> 

XSLTファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <result> 
     <xsl:call-template name="t"> 
      <xsl:with-param name="b" select="."></xsl:with-param>  
     </xsl:call-template> 
    </result> 
    </xsl:template> 

    <xsl:template name="t"> 
     <xsl:param name="b"/> 
     <xsl:for-each select="$b/*|$b/text()"> 
      <xsl:choose> 
       <xsl:when test="self::text()"> 
        <xsl:value-of select="." disable-output-escaping="no"></xsl:value-of> 
       </xsl:when> 
      </xsl:choose> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+1

を与え、あなたの希望する出力は何ですか?あなたのソリューションは私のために良く見えません。 –

答えて

1

文書要素が無視される前と後のあなたのテンプレートは、ルートノード/空白に呼び出され、テキストノードには貢献しないので、ルートノードには2つの子要素があり、要素ノードライブラリとプロセスxml-stylesheetの命令です。そう

$b/* 

は、要素ライブラリを選択し、

$b/text() 

は何も

を選択していないので、xsl:for-eachはちょうどそのXSLTでループテストself::text()"

0

ために偽を返す1反復を行いますテンプレートを適用することによって暗黙的に行われるのが最善です。あなたの思考は、手続き型プログラミング言語に多大な影響を受けているようです。
たとえば、すべてのサブノードにわたってループし、テキスト値を抽出します。付属XMLに適用

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

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <result> 
     <xsl:apply-templates/> 
    </result> 
    </xsl:template> 

    <xsl:template match="*|text()"> 
     <xsl:choose> 
      <xsl:when test="text()"> 
       <xsl:value-of select="." disable-output-escaping="no"/> 
      </xsl:when> 
     </xsl:choose> 
     <xsl:apply-templates/> 
    </xsl:template> 
</xsl:stylesheet> 

、これは

<?xml version="1.0" encoding="UTF-8"?> 
<result>30fun</result> 
関連する問題