我需要帮助,我可以将两个xslt变量存储在1个数组中,如稍后要使用的变量
<xsl:variable name="edgeDeviceArray">
<Item><xsl:value-of select="$edgeDev1" /></Item>
<Item><xsl:value-of select="$edgeDev2" /></Item>
</xsl:variable>
但是上面的输出似乎是串联的。我想稍后再提一下像edgeDeviceArray [1] ......
这是我的样式表的一个(非工作)片段,展示了我想要做的事情
<xsl:variable name="edgeDev1"
select="$deviceDoc/x:config/t:devices/t:device[t:address=$edgeDev1IP]/t:name" />
<xsl:variable name="edgeDev2"
select="$deviceDoc/x:config/t:devices/t:device[t:address=$edgeDev2IP]/t:name" />
<xsl:variable name="xrSet" select="$xrDeviceDoc/x:config/t:devices/t:device-module/t:devices" />
<xsl:for-each select="$xrSet">
<xsl:variable name="asideDoc"
select="document(concat($edgeDevice[position()], '.xml'))" />
</xsl:for-each>
在这里,我正在根据某些属性从1个doc中读取设备名称(如果它们匹配)。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="http://tail-f.com/ns/ncs"
xmlns:x="http://tail-f.com/ns/config/1.0"
xmlns:y="http://tail-f.com/ned/alu-sr"
xmlns:a="http://tail-f.com/ned/cisco-ios-xr"
xmlns:m="http://mask.data"
xmlns:im="http://inverse-mask.data" exclude-result-prefixes="xsl t x y"
xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:variable name="deviceDoc" select="document('devices.xml')" />
<xsl:variable name="edgeDev1IP"
select="../y:sdp[y:sdp-id=$sdpSet[1]]/y:far-end" />
<xsl:variable name="edgeDev1"
select="$deviceDoc/x:config/t:devices/t:device[t:address=$edgeDev1IP]/t:name" />
<xsl:variable name="edgeDev2IP"
select="../y:sdp[y:sdp-id=$sdpSet[2]]/y:far-end" />
<xsl:variable name="edgeDev2"
select="$deviceDoc/x:config/t:devices/t:device[t:address=$edgeDev2IP]/t:name" />
<xsl:variable name="xrDeviceDoc" select="document('xrDevices.xml')" />
<xsl:variable name="xrSet"
select="$xrDeviceDoc/x:config/t:devices/t:device-module/t:devices" />
<xsl:variable name="edgeDeviceArray">
<item><xsl:value-of select="$edgeDev1" /></item>
<item><xsl:value-of select="$edgeDev2" /></item>
</xsl:variable>
<anurag><xsl:value-of select="exsl:node-set($edgeDeviceArray)/item[1]" /></anurag>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
我想稍后再提及edgeDeviceArray [1]
这不会有两个原因:
edgeDeviceArray
。为了引用它的第一个项目,你需要使用像$edgeDeviceArray/item[1]
这样的东西; 这是一个最小化的例子:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="myVar">
<item>A</item>
<item>B</item>
</xsl:variable>
<xsl:template match="/">
<result>
<xsl:value-of select="exsl:node-set($myVar)/item[2]"/>
</result>
</xsl:template>
</xsl:stylesheet>
<强>结果强>
<?xml version="1.0" encoding="UTF-8"?>
<result>B</result>