如何将值存储在数组中,并在以后的XSL中使用它

  • 本文关键字:XSL 存储 数组 xml xslt-1.0
  • 更新时间 :
  • 英文 :


我想知道如何将XML中的值存储到XSL中的数组变量中,并使用这些数组创建新的XML文件。

使用XSL 1.0版本,这里有一个示例:

使用XSL 将sample1.xml转换为sample2.xml

sample1.xml

<root>
    <transfer>A</transfer>
    <station>A</station>
    <transfer>B</transfer>
    <station>B</station>
    <transfer>C</transfer>
    <station>C</station>    
</root>

sample2.xml

<root>
    <fund>A</fund>
    <place>A</place>
    <fund>B</fund>
    <place>B</place>
    <fund>C</fund>
    <place>C</place>    
</root>

因此,我需要将<transfer>标签中的所有值存储到一个数组中,并将这些值放入<fund>标签中。

到目前为止,我从一个XML文件中提取了值,并将这些值放入另一个XML文档中。

如何将这些项目放入数组?

正如Jeff Mercado所指出的,您不需要存储任何值来解决手头的任务,因为用两个ranaming模板重写身份规则会产生所需的结果。

然而,在其他任务中,具有类似"数组"的功能会派上用场。

通常,您可以定义一个变量来包含一组特定的节点,并且可以通过它们的位置(按文档顺序(访问这些节点,在谓词中指定该位置。

下面是一个例子

<xsl:variable name="vTransfers" select="/*/transfer"/>

定义了一个名为vTransfers的变量,其值为所有transfer元素的节点集,每个元素都是XML文档顶部元素的子元素。

然后

$vTransfers[1]

选择包含在CCD_ 5中的第一个元素。

$vTransfers[2]

选择包含在$vTransfers中的第二元素。。。

$vTransfers[position() = $k]

$vTransfers中选择其位置(按文档顺序(等于变量$k中包含的值的节点。

我不明白为什么需要一个数组。您只是在重命名元素。只需使用这些转换:

<xsl:template match="transfer">
  <fund><xsl:value-of select="."/></fund>
</xsl:template>
<xsl:template match="station">
  <place><xsl:value-of select="."/></place>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新