输入 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'
节点中选择的值。
所以我想让这些在顶部声明的变量分配有从遍历的子节点中提取的值。我被困在这里,无法前进。
任何人都可以解决这个问题。