将属性转移到新元素中
Tranfer attribute into a new element
首先我希望我能被理解。
我有这个:
<item>
<ptr target="X"/>BlahBlah
</item>
我想把它转换成这样:
<li>
<a href="X">Blahblah</a>
</li>
我所能做的就是创建这个:
<xsl:template match="tei:ptr">
<li>
<a>
<xsl:value-of select="parent::node()"/>
</a>
</li>
<xsl:apply-templates/>
</xsl:template>
但结果不是我所等待的结果:
<li>
<a>BlahBlah</a>
</li>BlahBlah
我可以更改我想要的元素但是<item>
元素的内容显示了两次,我忽略了显示href属性的方式。如果需要,我可以展示我的整个 XSL sheet.
我在 Whosebug 上搜索了没有结果,也许我只是不知道如何用语言表达我的问题。
有人可以帮忙解释一下它是如何工作的吗?我知道我对 XSLT 了解甚少,但我正在尝试。
非常感谢您的回答,
马蒂亚斯
实现此目的的一种方法是:
<xsl:template match="//item/text()">
<xsl:if test="normalize-space(.) != ''">
<li>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="../ptr/@target" />
</xsl:attribute>
<xsl:value-of select="normalize-space(.)" />
</xsl:element>
</li>
</xsl:if>
</xsl:template>
这导致
<?xml version="1.0" encoding="UTF-8"?>
<li>
<a href="X">BlahBlah</a>
</li>
如果合适,您可以将 //item
替换为 item
元素的相对路径。
首先我希望我能被理解。
我有这个:
<item>
<ptr target="X"/>BlahBlah
</item>
我想把它转换成这样:
<li>
<a href="X">Blahblah</a>
</li>
我所能做的就是创建这个:
<xsl:template match="tei:ptr">
<li>
<a>
<xsl:value-of select="parent::node()"/>
</a>
</li>
<xsl:apply-templates/>
</xsl:template>
但结果不是我所等待的结果:
<li>
<a>BlahBlah</a>
</li>BlahBlah
我可以更改我想要的元素但是<item>
元素的内容显示了两次,我忽略了显示href属性的方式。如果需要,我可以展示我的整个 XSL sheet.
我在 Whosebug 上搜索了没有结果,也许我只是不知道如何用语言表达我的问题。
有人可以帮忙解释一下它是如何工作的吗?我知道我对 XSLT 了解甚少,但我正在尝试。
非常感谢您的回答,
马蒂亚斯
实现此目的的一种方法是:
<xsl:template match="//item/text()">
<xsl:if test="normalize-space(.) != ''">
<li>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="../ptr/@target" />
</xsl:attribute>
<xsl:value-of select="normalize-space(.)" />
</xsl:element>
</li>
</xsl:if>
</xsl:template>
这导致
<?xml version="1.0" encoding="UTF-8"?>
<li>
<a href="X">BlahBlah</a>
</li>
如果合适,您可以将 //item
替换为 item
元素的相对路径。