0

XML:

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

我需要为paramxml 中的每个参数节点创建。

所以预期的结果:

<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}" />

或变数。

4

2 回答 2

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:出现在输出文档中(它本身就是另一个样式表)。

于 2013-03-08T13:14:59.550 回答
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>
于 2013-03-07T17:51:54.733 回答