首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复杂上下文处理

复杂上下文处理
EN

Stack Overflow用户
提问于 2016-11-30 16:16:37
回答 1查看 32关注 0票数 0

我有一个复杂的要求。我需要从另一个节点获取值,同时使用来自另一个节点的上下文。请参阅下面的样本:

代码语言:javascript
运行
复制
<ObjectEvent>
 <epcList>
  <epc>111</epc>
  <epc>222</epc>
 </epcList>
 <material>ABC</material>
</ObjectEvent>
<ObjectEvent>
 <epcList>
  <epc>containerFOR111222</epc>
 </epcList>
</ObjectEvent>
<ObjectEvent>
 <epcList>
  <epc>333</epc>
 </epcList>
 <material>DEF</material>
</ObjectEvent>
<ObjectEvent>
 <epcList>
  <epc>containerFOR333</epc>
 </epcList>
</ObjectEvent>
<AggregationEvent>
 <parentID>containerFOR111222</parentID>
 <childEPCs>
  <epc>111</epc>
  <epc>222</epc>
 </childEPCs>
</AggregationEvent>
<AggregationEvent>
 <parentID>containerFOR333</parentID>
 <childEPCs>
  <epc>333</epc>
 </childEPCs>
</AggregationEvent>

父节点的数量将取决于独特的材料。因此,在这种情况下,将出现2。输出应该如下所示:

代码语言:javascript
运行
复制
<MATERIAL>
 <BATCH>ABC</BATCH>
 <SERIES>
  <TOTAL>2</TOTAL>
  <EPCS>
   <EPC>111</EPC>
   <CONTAINER>containerFOR111222</CONTAINER>
  </EPCS>
  <EPCS>
   <EPC>222</EPC>
   <CONTAINER>containerFOR111222</CONTAINER>
  </EPCS>
 </SERIES>
</MATERIAL>
<MATERIAL>
 <BATCH>DEF</BATCH>
 <SERIES>
  <TOTAL>1</TOTAL>
  <EPCS>
   <EPC>333</EPC>
   <CONTAINER>containerFOR333</CONTAINER>
  </EPCS>
 </SERIES>
</MATERIAL>

我已经得到了材料,批,系列,总计,EPCS和EPC的权利。问题在于容器字段。我无法得到第二个上下文(containerFOR333)的值。我只是得到了第一个上下文的值:

这是我现在的地图。我对集装箱没有什么想法:

代码语言:javascript
运行
复制
<xsl:for-each select="//ObjectEvent/material">
 <MATERIAL>
  <BATCH>
   <xsl:value-of select="./material"/>
  </BATCH>
  <SERIES>
   <TOTAL>
    <xsl:value-of select="count(./epcList/epc"/>
   </TOTAL>
    <xsl:for-each select="./epcList/epc">
     <EPCS>
      <EPC>
       <xsl:value-of select="./epcList/epc"/>
      </EPC>
      <CONTAINER>???</CONTAINER>
      </EPCS>
    </xsl:for-each>
  </SERIES>
 </MATERIAL>
</xsl:for-each>

我的实际来源、目标消息和映射要比这个复杂得多,所以希望我能够从一个简单的解决方案开始,然后用更高的复杂度解决问题。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-01 09:10:21

如果--正如您在注释中所说的-- ObjectEvent节点成对出现,那么您需要执行如下操作:

代码语言:javascript
运行
复制
<xsl:for-each select="//ObjectEvent[position() mod 2 = 1]">
    <MATERIAL>
        <BATCH>
            <xsl:value-of select="material"/>
        </BATCH>
        <SERIES>
            <TOTAL>
                <xsl:value-of select="count(epcList/epc)"/>
            </TOTAL>
            <xsl:for-each select="epcList/epc">
                <EPCS>
                    <EPC>
                        <xsl:value-of select="."/>
                    </EPC>
                    <CONTAINER>
                        <xsl:value-of select="../../following-sibling::ObjectEvent[1]/epcList/epc"/>
                    </CONTAINER>
                </EPCS>
            </xsl:for-each>
        </SERIES>
    </MATERIAL>
</xsl:for-each>

演示(使用格式良好的输入):http://xsltransform.net/gWEamLj

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40893114

复制
相关文章

相似问题

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