XSLT帕拉姆名称与节点
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}" />
或可变。
<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>
这应该可能只是'select =“{。}”' – 2013-03-07 18:10:18
@IanRoberts是的,它是多余的 - 只需要使用更详细的XPath就可以对OP更清晰。 – wst 2013-03-07 19:00:30
我不确定'./string()'是否有效XPath - 'string'是一个函数,不是节点测试。 – 2013-03-07 19:13:08
从您的编辑看来,您正在寻找使用一个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>
元素。
如果您正在对您的问题进行实质性更新,请通过评论他们的答案,告知任何已经回答的人 - 像我一样:),以便他们知道要更新它。 – wst 2013-03-08 17:14:39