将属性转换为新元素

时间:2016-02-26 21:42:20

标签: xml xslt attributes transfer

首先,我希望我会被理解。

我有这个:

       <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表。

我搜索了stackoverflow而没有结果,也许我只是不知道如何将我的问题写成文字。

有人可以帮忙解释它是如何运作的吗?我知道我对XSLT了解不多,但我正在尝试。

非常感谢您的回答,

的Matthias

1 个答案:

答案 0 :(得分:1)

实现这一目标的一种方法是:

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