首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从嵌套循环中访问外部循环中的元素?

如何从嵌套循环中访问外部循环中的元素?
EN

Stack Overflow用户
提问于 2009-01-17 12:41:43
回答 3查看 18.8K关注 0票数 21

我嵌套了xsl:for循环:

代码语言:javascript
运行
复制
<xsl:for-each select="/Root/A">
    <xsl:for-each select="/Root/B">
        <!-- Code -->
    </xsl:for>
</xsl:for>

从内循环中,如何从外部循环中的当前节点访问属性?

我发现自己一直在写这样的代码:

代码语言:javascript
运行
复制
<xsl:for-each select="/Root/A">
    <xsl:variable name="someattribute" select="@SomeAttribute"/>
    <xsl:for-each select="/Root/B">
        <!-- Now can use $someattribute to access data from 'A' -->
    </xsl:for>
</xsl:for>

这不是很好的扩展,因为有时我需要访问几个信息,并最终为每个片段创建一个变量。有更简单的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-17 12:44:21

您可以将整个/Root/A结构存储在变量中,并对该变量进行引用,而不是为需要访问的每个属性和子元素创建一个新变量。

代码语言:javascript
运行
复制
<xsl:for-each select="/Root/A/">
    <xsl:variable name="ROOT_A" select="."/>
    <xsl:for-each select="/Root/B/">
         <!-- Variable is accessed like this: $ROOT_A/@someAttribute
              Just like a normal XML node -->
    </xsl:for-each>
</xsl:for-each>
票数 26
EN

Stack Overflow用户

发布于 2009-01-17 13:00:11

韦尔博格回答得很好--但要注意的是,你似乎在做一个漫谈(交叉)连接--这是故意的吗?如果您正在尝试执行常规连接(使用谓词等),那么您希望查看<xsl:key/> -即声明一个键:

代码语言:javascript
运行
复制
<xsl:key name="BIndex" match="/Root/B" use="SomeChildNode"/>

然后在谓词中使用:

代码语言:javascript
运行
复制
<xsl:for-each select="/Root/A/">
    <xsl:variable name="ROOT_A" select="."/>
    <xsl:for-each select="key('BIndex', LocalNode)">
     <!-- -->
    </xsl:for-each>
</xsl:for-each>

这应该相当于谓词(但比谓词快得多):

代码语言:javascript
运行
复制
    <xsl:for-each select="/Root/B[SomeChildNode = current()/LocalNode]">

如果要对数据进行分组,请查看门窗群

票数 8
EN

Stack Overflow用户

发布于 2015-12-10 07:39:26

还可使用以下方法:

代码语言:javascript
运行
复制
    <xsl:for-each select="ns:attribute">
        <name><xsl:value-of select="ns:name" /></name>              
        <xsl:for-each select="ns:value">
        <value><xsl:value-of select="."/></value>       
        </xsl:for-each>
    </xsl:for-each>      

用于解析XML文档。

代码语言:javascript
运行
复制
 <ns:attribute>
      <ns:name>name</ns:name>
      <!--1 or more repetitions:-->
      <ns:value>Rahul</ns:value>
      <ns:value>Sushovan</ns:value>
</ns:attribute>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/453258

复制
相关文章

相似问题

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