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

XSLT迭代XML节点提取指定字段并生成SQL插入语句求助

解决XSLT转换中无法获取VORNR字段生成SQL插入语句的问题

问题分析

  • 迭代提取XML中的AUFNR、BDMNG、MATNR、MEINS、VORNR字段生成SQL插入语句时,VORNR字段无法正确获取,导致输出SQL不符合预期。
  • 核心原因:VORNR的XPath定位路径错误,未正确关联到其所在的父层级节点。

模拟场景示例

示例XML结构

<ProductionOrder>
  <AUFNR>1000001</AUFNR>
  <Operations>
    <Operation>
      <VORNR>0010</VORNR>
      <Components>
        <Component>
          <MATNR>MAT001</MATNR>
          <BDMNG>10.0</BDMNG>
          <MEINS>PC</MEINS>
        </Component>
        <Component>
          <MATNR>MAT002</MATNR>
          <BDMNG>5.0</BDMNG>
          <MEINS>KG</MEINS>
        </Component>
      </Components>
    </Operation>
    <Operation>
      <VORNR>0020</VORNR>
      <Components>
        <Component>
          <MATNR>MAT003</MATNR>
          <BDMNG>3.0</BDMNG>
          <MEINS>M</MEINS>
        </Component>
      </Components>
    </Operation>
  </Operations>
</ProductionOrder>

错误的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" />
  <xsl:template match="/">
    <xsl:for-each select="ProductionOrder/Operations/Operation/Components/Component">
      INSERT INTO production_order_components (AUFNR, VORNR, MATNR, BDMNG, MEINS)
      VALUES ('<xsl:value-of select="../../../AUFNR"/>', '<xsl:value-of select="VORNR"/>', '<xsl:value-of select="MATNR"/>', '<xsl:value-of select="BDMNG"/>', '<xsl:value-of select="MEINS"/>');
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

错误点:select="VORNR"试图从当前Component节点直接获取VORNR,但该节点下无此字段,需向上回溯到Operation节点。

修正后的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="UTF-8" />
  
  <xsl:template match="/">
    <!-- 遍历每个组件,关联对应的工单和工序 -->
    <xsl:for-each select="ProductionOrder/Operations/Operation/Components/Component">
      <!-- 定义变量存储关联字段,提升可读性 -->
      <xsl:variable name="currentAufnr" select="../../../AUFNR" />
      <xsl:variable name="currentVornr" select="ancestor::Operation/VORNR" />
      
      <xsl:text>INSERT INTO production_order_components (AUFNR, VORNR, MATNR, BDMNG, MEINS) VALUES ('</xsl:text>
      <xsl:value-of select="$currentAufnr" />
      <xsl:text>', '</xsl:text>
      <xsl:value-of select="$currentVornr" />
      <xsl:text>', '</xsl:text>
      <xsl:value-of select="MATNR" />
      <xsl:text>', '</xsl:text>
      <xsl:value-of select="BDMNG" />
      <xsl:text>', '</xsl:text>
      <xsl:value-of select="MEINS" />
      <xsl:text>');&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

关键修正:

  • 使用ancestor::Operation/VORNR定位到当前组件所属的工序节点中的VORNR字段,确保路径正确
  • 引入变量存储字段值,提升代码可读性和维护性

预期输出SQL

INSERT INTO production_order_components (AUFNR, VORNR, MATNR, BDMNG, MEINS) VALUES ('1000001', '0010', 'MAT001', '10.0', 'PC');
INSERT INTO production_order_components (AUFNR, VORNR, MATNR, BDMNG, MEINS) VALUES ('1000001', '0010', 'MAT002', '5.0', 'KG');
INSERT INTO production_order_components (AUFNR, VORNR, MATNR, BDMNG, MEINS) VALUES ('1000001', '0020', 'MAT003', '3.0', 'M');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:55:29