具有节点值的XSLT Param名称

时间:2013-03-07 17:48:16

标签: xml xslt xslt-1.0 param

XML:

<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参数,所以它稍后会在代码中使用。固定在上面。

修改:

需要XSLT 1.0

修改:

主要问题是从xml值创建xsl:param的名称 如下所示无效:

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

或变量。

2 个答案:

答案 0 :(得分: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 :(得分:0)

根据您的编辑,您似乎正在寻找使用一个XSLT创建另一个XSLT的方法。要在xsl:命名空间中创建元素,您需要使用<xsl:element>或使用命名空间别名设施

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

样式表中带有前缀xslo:的元素在输出文档中变为xsl:(它本身就是另一个样式表)。