首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个xslt变量存储在一个xslt变量中

将两个xslt变量存储在一个xslt变量中
EN

Stack Overflow用户
提问于 2017-05-31 21:27:01
回答 1查看 623关注 0票数 0

我需要帮助,我可以将两个xslt变量存储在一个类似数组的变量中,以便以后使用

代码语言:javascript
复制
    <xsl:variable name="edgeDeviceArray">
        <Item><xsl:value-of select="$edgeDev1" /></Item>
        <Item><xsl:value-of select="$edgeDev2" /></Item>
    </xsl:variable> 

但上面的输出似乎是串联的。我想稍后再像edgeDeviceArray1一样提到...

下面是我的样式表的一个(非工作的)片段,它演示了我想要做的事情

代码语言:javascript
复制
    <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>

在这里,我从一个文档中读取设备名称,如果它们匹配,则基于某些属性。

代码语言:javascript
复制
<?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> 
EN

回答 1

Stack Overflow用户

发布于 2017-05-31 22:20:39

我稍后会提到像edgeDeviceArray1这样的

这不会起作用的原因有两个:

  1. ,只有一个edgeDeviceArray。为了引用它的第一项,需要使用XSLT1.0中的$edgeDeviceArray/item[1]
  2. 之类的东西,您的变量是一个结果树片段,必须先转换为节点集,然后XPath才能对其内容进行寻址。

下面是一个最小化的示例:

XSLT 1.0

代码语言:javascript
复制
<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>

结果

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<result>B</result>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44286117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档