入力 XML :
<content>
<link>
<text>sign on</text>
<trackableReference local="/PUBLIC_WEB_URL" title=""/>
</link>
</content>
出力xml:
<content>
<a id="mylink" href="PUBLIC_WEB_URL" title="">sign on</a>
</content>
xsltが試したのは、これでうまくいきます:
1)
<?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="content">
<content>
<xsl:apply-templates/>
</content>
</xsl:template>
<xsl:template match="*[name()='link']">
<a id="mylink">
<xsl:attribute name="href"><xsl:value-of select="trackableReference/@local"/></xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="trackableReference/@title"/></xsl:attribute>
<xsl:value-of select="text"/>
</a>
</xsl:template>
</xsl:stylesheet>
2)
<?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="content">
<content>
<xsl:apply-templates/>
</content>
</xsl:template>
<xsl:template match="*[name()='link']">
<a id="mylink">
<xsl:attribute name="href">
<xsl:for-each select="child::*">
<xsl:choose>
<xsl:when test="name()='trackableReference'">
<xsl:value-of select="@local"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:for-each select="child::*">
<xsl:choose>
<xsl:when test="name()='trackableReference'">
<xsl:value-of select="@title"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:attribute>
<xsl:for-each select="child::*">
<xsl:choose>
<xsl:when test="name()='text'">
<xsl:value-of select="."/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</a>
</xsl:template>
</xsl:stylesheet>
しかし、トラバースする子ノードに応じて値を動的に変更するグローバル変数をテンプレートに作成する必要があるシナリオがあります。このシナリオで変更された上記のテンプレートの例
<xsl:template match="*[name()='link']">
<xsl:variable name="x1"/>
<xsl:variable name="x2"/>
<xsl:variable name="x3"/>
<xsl:for-each select="child::*">
<xsl:choose>
<xsl:when test="name()='trackableReference'">
<xsl:value-of select="@local"/>
<xsl:value-of select="@title"/>
</xsl:when>
<xsl:when test="name()='text'">
<xsl:value-of select="."/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<a id="mylink">
<xsl:attribute name="href"><xsl:value-of select="$x1"/></xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="$x2"/></xsl:attribute>
<xsl:value-of select="$x3"/>
</a>
</xsl:template>
ここ
x1
から選択した値を変数に割り当てる必要があります@local
。x2
から選択した値を変数に割り当てる必要があります@title
。x3
変数には、ノードから選択された値を割り当てる必要があり'text'
ます。
したがって、トラバースされた子ノードから抽出された値が割り当てられるように、これらの変数を上で宣言したいと思います。ここで行き詰まり、先に進めません。
誰でもこの問題を解決できますか。