使用XSL获取节点的属性

时间:2014-10-24 13:35:40

标签: xml xslt

我有一个关于XSL的问题。 在CMS系统中,我得到以下输出:

<custom name="email"><link title="Send email" href="mailto:some@exmple.com">some@example.com</link></custom>

我想基于此输出“a”属性。我正在使用以下XSL模板:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:output method="html" indent="yes" encoding="UTF-8"/>

<!-- <custom name="email" pretext="Some custom text"><link title="Send email" href="mailto:some@exmple.com">some@example.com</link></custom> -->
<xsl:template match="custom[@name='email']">
    <div class="custom email">
        <span class="icon custom email"></span>
        <p>
            <span class="pretext"><xsl:value-of select="@custom:pretext"/></span>
            <a href="{link/@href}"><xsl:value-of select="link"/></a>
        </p>
    </div>
</xsl:template>

我想输出:

<div class="custom email">
    <span class="icon custom email"></span>
    <p>
        <span class="pretext">Some custom text</span>
        <a href="mailto:some@example.com" title="Send email">some@example.com</a>
    </p>
</div>

但是我没有让它工作......我的问题是我无法从“链接”获得“href”属性。有人能帮助我吗?

非常感谢。

菲利普

1 个答案:

答案 0 :(得分:1)

您可以使用花括号将xpath计算为属性值。例如:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent='yes'/>
<xsl:strip-space elements="*"/>
<xsl:template match="custom">
    <a href="{link/@href}"><xsl:value-of select="link"/></a>
</xsl:template>
</xsl:stylesheet>

下面的XML在针对上述XSLT运行时:

<custom name="email"><link title="Send email" href="mailto:some@exmple.com">some@example.com</link></custom>

给出了以下结果:

<?xml version="1.0" encoding="utf-8"?>
<a href="mailto:some@exmple.com">some@example.com</a>

它是否解决了使用@href获取<a>的问题?