我想知道如何将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文件中。
如何将这些项目放入数组?
答案 0 :(得分:3)
正如Jeff Mercado所述,您不需要存储任何值来解决手头的任务,,因为用两个ranaming模板覆盖身份规则会产生想要的结果。
但是,在具有“阵列”功能的其他任务中使用起来非常方便。
通常,您可以定义一个变量以包含一组特定的节点,这些节点可以通过它们的位置(按文档顺序)访问,在谓词中指定此位置。
以下是一个示例:
<xsl:variable name="vTransfers" select="/*/transfer"/>
定义了一个名为vTransfers
的变量,其值为所有transfer
元素的节点集,每个元素都是XML文档顶部元素的子元素。
,然后强>:
$vTransfers[1]
选择$vTransfers
中包含的第一个元素。
$vTransfers[2]
选择$vTransfers
,...
$vTransfers[position() = $k]
从$vTransfers
中选择节点,其位置按文档顺序等于变量$k
中包含的值。
答案 1 :(得分:2)
我不明白为什么你需要一个数组。你只是重命名元素。只需使用这些转换:
<xsl:template match="transfer">
<fund><xsl:value-of select="."/></fund>
</xsl:template>
<xsl:template match="station">
<place><xsl:value-of select="."/></place>
</xsl:template>