You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT转换EPCIS XML未获预期输出,请求修正指导

EPCIS XML转Despatch Advice的XSLT问题修正

问题概述

给定的EPCIS XML中,包含一个带有两个<epc>节点的shipping事件(<bizStep>包含shipping),但当前XSLT转换仅生成一个<despatchAdviceLogisticUnitLineItem>,预期应为每个<epc>生成一个对应行项目。

现有XSLT的问题

  1. 路径匹配错误:原代码使用/ns0:EPCISDocument/EPCISBody/EventList/ObjectEvent作为遍历路径,但输入XML的根节点是<EPCISBody>,不存在外层的<EPCISDocument>节点,也未使用ns0命名空间,导致路径无法正确匹配目标事件。
  2. 未遍历单个EPC节点:在符合条件的<ObjectEvent>中直接使用<xsl:value-of select="epcList/epc"/>,只会提取第一个<epc>的值,且未为每个<epc>生成独立的行项目结构,因此仅输出一条结果。
  3. 不必要的命名空间前缀:根元素使用tns:despatchAdvice,但预期输出中没有命名空间前缀,导致输出结构不一致。

修正后的XSLT代码

<xsl:template match="/">
  <despatchAdvice>
    <!-- 遍历所有ObjectEvent,筛选出shipping事件 -->
    <xsl:for-each select="/EPCISBody/EventList/ObjectEvent[contains(bizStep, 'shipping')]">
      <!-- 为当前事件下的每个epc生成独立的行项目 -->
      <xsl:for-each select="epcList/epc">
        <despatchAdviceLogisticUnitLineItem>
          <logisticUnitIdentification>
            <serialShipmentContainerCode>
              <serialShippingContainerCode>
                <xsl:value-of select="."/>
              </serialShippingContainerCode>
            </serialShipmentContainerCode>
          </logisticUnitIdentification>
          <levelId>
            <levelIdentification>
              <xsl:value-of select="."/>
            </levelIdentification>
          </levelId>
        </despatchAdviceLogisticUnitLineItem>
      </xsl:for-each>
    </xsl:for-each>
  </despatchAdvice>
</xsl:template>

修正说明

  • 修正路径:将遍历路径改为/EPCISBody/EventList/ObjectEvent,匹配输入XML的实际结构;同时将筛选条件整合到select中,简化代码。
  • 嵌套遍历EPC:在shipping事件内部新增<xsl:for-each select="epcList/epc"/>,为每个<epc>生成独立的行项目,确保每个EPC对应一条输出。
  • 移除命名空间前缀:将根元素改为<despatchAdvice>,与预期输出结构一致。
  • 使用.引用当前节点:在嵌套遍历中,用.指代当前<epc>节点,简化值提取逻辑。

内容的提问来源于stack exchange,提问作者user6927606

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:59:49