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

如何用C#的EdiTools库实现XML转EDI及解析EDI格式

EDI文件格式说明

EDI(电子数据交换)分两大主流标准:ANSI X12(北美常用)和EDIFACT(国际通用)。你代码里的ISA、GS属于ANSI X12标准的控制段,而EDIFACT对应的控制段是UNB、UNG。

X12格式的EDI文件结构层级清晰:

  • 交换层(Interchange):整个文件的最外层,由ISA(起始)和IEA(结束)段包裹
  • 功能组层(Functional Group):同一业务类型的交易集合,由GS(起始)和GE(结束)段包裹
  • 交易集层(Transaction Set):具体的业务数据(比如订单、发票),由ST(起始)和SE(结束)段包裹
  • 数据段(Segment):组成交易集的最小逻辑单元,比如BEG(订单抬头)、PO1(订单明细)
ISA、GS段的核心作用

ISA段(Interchange Control Header)

是整个EDI交换的"身份证",必须位于文件最开头,包含的关键信息:

  • 交换双方的唯一标识(发送方/接收方ID)
  • 交换的日期、时间、唯一控制号(确保每个交换不重复)
  • 标准版本(比如00401代表X12 4010版本)
  • 传输控制参数(是否需要回执、测试/生产标识)

没有正确的ISA段,接收方系统会直接拒收整个EDI文件。

GS段(Functional Group Header)

用来归类同一业务类型的交易,比如把所有采购订单(代码PO)放在一个组里,关键信息:

  • 功能标识代码(PO=采购订单,IN=发票)
  • 应用层面的发送/接收方代码(比ISA的更细分,比如具体业务系统ID)
  • 组控制号(同一交换内的组唯一)
  • 业务标准版本(比如004010对应X12 4010版本)
典型代码解读(EdiTools实现XML转X12)

假设你用的是类似以下的代码:

// 初始化整个EDI交换对象
var interchange = new EdiInterchange();

// 配置ISA交换头部
interchange.IsaSegment = new IsaSegment
{
    InterchangeSenderID = "YOUR_COMPANY_ID",
    InterchangeReceiverID = "CLIENT_COMPANY_ID",
    InterchangeDate = DateTime.Now.ToString("yyMMdd"),
    InterchangeTime = DateTime.Now.ToString("HHmm"),
    InterchangeControlNumber = "000000001", // 每次递增,不能重复
    UsageIndicator = "P" // P=生产环境,T=测试环境
};

// 配置GS功能组头部
var gsSegment = new GsSegment
{
    FunctionalIdentifierCode = "PO", // 采购订单组
    ApplicationSenderCode = "YOUR_APP_ID",
    ApplicationReceiverCode = "CLIENT_APP_ID",
    GroupControlNumber = "000000001"
};
var group = new EdiGroup(gsSegment);
interchange.Groups.Add(group);

// 从XML加载业务数据并转成交易集
var xmlDoc = XDocument.Load("order.xml");
var transactionSet = EdiTransactionSet.FromXml(xmlDoc, "850"); // 850是X12采购订单交易集代码
group.TransactionSets.Add(transactionSet);

// 生成最终EDI字符串
var ediOutput = interchange.ToEdiString();

代码逻辑拆解:

  1. EdiInterchange:对应整个EDI文件,是所有段的容器
  2. IsaSegment:配置交换级别的核心控制信息,确保文件能被接收方识别
  3. GsSegment:定义业务类型分组,让接收方系统快速区分处理不同业务数据
  4. EdiTransactionSet.FromXml:把XML里的业务数据映射成X12标准的交易集结构
  5. ToEdiString:把内存中的EDI对象序列化成符合X12格式的文本文件

如果需要转EDIFACT,只需替换控制段为UNB、UNG,交易集用EDIFACT的标准代码(比如ORDERS代表订单)即可,EdiTools同时支持两大标准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:42:09