我应如何从835 EDI文件中提取数据?

时间:2019-02-07 16:32:41

标签: java edi smooks x12 edifact

我有835个EDI文件,

ISA*00*          *00*          *33*83876          *ZZ*B00482000   *190128*1100*^*00501*000000001*0*T*:~
ST*835*000000001~
BPR*H*0*C*NON************20190128~
TRN*1*PK673981180*141138499245*PS0087726~
REF*EV*B048499999800~
REF*F2*1083~
DTM*405*20190128~

我应该如何提取ST值,即000000001,等等,

我尝试先使用SMOOKS将edi文件转换为XML格式,然后再通过父级和子级节点检索数据。

  public static void main(String[] args) throws SmooksException, Exception {
    String modelURI = "urn:org.milyn.edi.unedifact:d99a-mapping:1.4";
    UNEdifactInterchangeParser parser = new UNEdifactInterchangeParser();
 //   parser.addMappingModels(modelURI, new URI("/"));
    parser.setFeature(EDIParser.FEATURE_IGNORE_NEWLINES, true);
    SAXHandler handler = new SAXHandler();
    parser.setContentHandler(handler);
    parser.parse(new InputSource(new java.io.FileInputStream(
            "myEDIfile.edi")));
    Document doc = handler.getDocument();
    // Here you have your document
    new XMLOutputter(Format.getPrettyFormat()).output(doc, System.out);
}

但我遇到错误

原因:org.xml.sax.SAXException:未知/意外的UN / EDIFACT控制块段代码'ISA'。

如果有人可以为我提供可能的解决方案,那就太好了。 在此先感谢。

3 个答案:

答案 0 :(得分:2)

您正在尝试使用EDIFACT解析器来解析X12 835。

您需要使用相应的X12解析器来代替UNEdifactInterchangeParser。

答案 1 :(得分:0)

看看X12解析器-它通常用于此类文件:

文档:https://media.readthedocs.org/pdf/x12-parser/latest/x12-parser.pdf

GitHub存储库:https://github.com/imsweb/x12-parser

答案 2 :(得分:0)

看看 edi-835-parser。这是我专门为解析 EDI 835 文件类型而编写的 Python 库,比使用 x12 解析器更“开箱即用”。

GitHub 存储库:https://github.com/keironstoddart/edi-835-parser