使用样式表更改nodeset中的元素

时间:2014-11-26 04:41:54

标签: xml xslt xslt-1.0 xslt-2.0

我有这个样式表,它采用空输入。

并需要将输出生成为

    <result>
        <Customers>
            <customer name="FirstName">John</customer>
            <customer name="FirstName">Kevin</customer>
        </Customers>
    </result>

我现在在xsl中指定的结果是我将从同一样式表中的其他服务调用获得的。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" >

    <xsl:template match="/">

        <xsl:variable name="request">
            <result>
                <Customers>
                    <customer name="Name">John</customer>
                    <customer name="Name">Kevin</customer>
                </Customers>
            </result>
        </xsl:variable>

            <xsl:apply-templates select="$request/result/Customers"/>

    </xsl:template>

    <xsl:template match="node( ) | @*">
        <xsl:copy>
            <xsl:apply-templates select="@* | node( )"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="customer/@name[. = 'Name']">
        <xsl:attribute name="name">FirstName</xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

但调用模板时出错。我的样式表出了什么问题?

1 个答案:

答案 0 :(得分:2)

你说过which takes an empty input吗?不,XSLT仅在提供XML输入时才起作用(它可能小到这个:<r/>),但它必须具有XML输入。其他一切看起来都很好..但是根据你的预期输出,apply-templates应该像

<xsl:apply-templates select="$request/result"/>