2016-12-28 7 views
0

私はXSLTを使い慣れていないので、子タグから新しいタグに属性をコピーする方法を理解できません。私はそれが愚かな初心者の間違いだと確信しています。XSLT:属性を新しいタグに転送する方法

入力ファイルは次のとおりです。

 

    <?xml version="1.0" encoding="UTF-8"?> 
    <navMap> 
    <navPoint> 
     <navLabel> 
     <text>Chapter 1</text> 
     </navLabel> 
     <content src="Text/chapter01.html"/> 
    </navPoint> 
    </navMap> 

私がこれまででてきた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="/"> 
    <html> 
    <body> 
     <xsl:for-each select="navMap/navPoint"> 
      <h1><span><xsl:value-of select="./content/@src" /></span><xsl:value-of select="./navLabel/text" /></h1> 
     </xsl:for-each> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

これが生成されます:しかし

<h1><span>Text/chapter01.html</span>Chapter 1</h1> 

は、私が必要:

<h1 href="Text/chapter01.html">Chapter 1</h1> 

h1タグに新しいhref属性を追加し、コンテンツタグのsrc属性の値をコピーするにはどうすればよいですか?

は、私が試した:

<h1 href="<xsl:value-of select="./content/@src" />"><xsl:value-of select="./navLabel/text" /></h1> 

それは構文エラーを生成しました。

答えて

3

通常、好ましい方法はAttribute Value Templatesです。

<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:for-each select="navMap/navPoint"> 
      <h1 href="{content/@src}"> 
       <xsl:value-of select="navLabel/text" /> 
      </h1> 
     </xsl:for-each> 
    </body> 
    </html> 
</xsl:template> 

中括弧は、文字通り出力するのではなく、評価する式を示します。

また、属性に

<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:for-each select="navMap/navPoint"> 
      <h1> 
       <xsl:attribute name="href"> 
        <xsl:value-of select="content/@src" /> 
       </xsl:attribute> 
       <xsl:value-of select="navLabel/text" /> 
      </h1> 
     </xsl:for-each> 
    </body> 
    </html> 
</xsl:template> 

を作成するためにxsl:attributeを使用することができますしかし、あなたが見ることができるように、これは少し長いったらしいです。ただし、条件式(たとえば、特定の状況でのみ追加する)や、表現があまりにも複雑すぎて属性値テンプレートに収まらないようにする場合には、これを使用できます。

+0

ご返信ありがとうございます! –

関連する問題