将属性转移到新元素中

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 元素的相对路径。