2013-03-07 72 views
0

XML的值:XSLT帕拉姆名称与节点

<root> 
<param name="a">valueOfA</param> 
<param name="b">valueOfB</param> 
<param name="c">valueOfC</param>  
</root> 

我需要为每个XML节点PARAM创建param

所以预期的结果:

<xsl:param name="a" select="valueOfA" /> 
<xsl:param name="b" select="valueOfB" /> 
<xsl:param name="c" select="valueOfC" /> 

编辑:

弄错了,我需要一个实际的XSLT PARAM,所以这将是可用在后面的代码。固定在上面。

编辑:

XSLT 1.0需要

编辑:

主要问题是使XSL的名字:从XML值PARAM如下 无效:

<xsl:param name="{@name}" /> 

或可变。

+0

如果您正在对您的问题进行实质性更新,请通过评论他们的答案,告知任何已经回答的人 - 像我一样:),以便他们知道要更新它。 – wst 2013-03-08 17:14:39

回答

0
<xsl:template match="root"> 
    <xsl:copy> 
    <xsl:apply-templates select="param"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="param"> 
    <param name="{ ./@name }" select="{ string(.) }"></param> 
</xsl:template> 
+1

这应该可能只是'select =“{。}”' – 2013-03-07 18:10:18

+0

@IanRoberts是的,它是多余的 - 只需要使用更详细的XPath就可以对OP更清晰。 – wst 2013-03-07 19:00:30

+0

我不确定'./string()'是否有效XPath - 'string'是一个函数,不是节点测试。 – 2013-03-07 19:13:08

0

从您的编辑看来,您正在寻找使用一个XSLT创建另一个XSLT的方法。为了在xsl:命名空间中创建元素,你需要或者使用<xsl:element>或者使用命名空间别名设施在样式表在输出文档中成为xsl:(这本身就是另一种样式表)前缀xslo:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
    xmlns:xslo="urn:xsl-output" exclude-result-prefixes="xslo"> 
    <xsl:namespace-alias stylesheet-prefix="xslo" result-prefix="xsl" /> 

    <xsl:template match="root"> 
    <xslo:stylesheet version="1.0"> 
     <xsl:apply-templates select="param" /> 
    </xslo:stylesheet> 
    </xsl:template> 

    <xsl:template match="param"> 
    <xslo:param name="{@name}" select="{.}" /> 
    </xsl:template> 
</xsl:stylesheet> 

元素。