我想知道如何将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>