Source code for pyx12.xmlx12_simple
######################################################################
# Copyright
# John Holland <john@zoner.org>
# All rights reserved.
#
# This software is licensed as described in the file LICENSE.txt, which
# you should have received as part of this distribution.
#
######################################################################
"""
Create an X12 document from a XML data file in the simple form
"""
from __future__ import annotations
from typing import TextIO
from xml.etree.ElementTree import Element
import defusedxml.ElementTree as et
# Intrapackage imports
import pyx12.segment
import pyx12.x12file
[docs]
def convert(filename: str | TextIO, fd_out: TextIO) -> bool:
"""
Convert a XML file in simple X12 form to an X12 file
:param filename: libxml2 requires a file name. '-' gives stdin
:type filename: string
:param fd_out: Output file
:type fd_out: file descripter
"""
wr = pyx12.x12file.X12Writer(fd_out, "~", "*", ":", "\n", "^")
parser = et.XMLParser(encoding="utf-8")
doc = et.parse(filename, parser=parser)
for node in doc.iter():
if node.tag == "seg":
wr.Write(get_segment(node))
return True
[docs]
def get_segment(cSegment: Element) -> pyx12.segment.Segment:
"""
Build an X12 segment from a XML node
"""
seg_id = cSegment.get("id")
# seg_id = cSeg.findtext('data_ele')
seg_data = pyx12.segment.Segment(seg_id, "~", "*", ":")
for node in cSegment.iter():
if node.tag == "ele":
ele_id = node.get("id")
if node.text != "":
seg_data.set(ele_id, node.text) # type: ignore[arg-type]
elif node.tag == "comp":
for subele in node.findall("subele"):
subele_id = subele.get("id")
if subele.text is not None and subele.text != "":
seg_data.set(subele_id, subele.text) # type: ignore[arg-type]
return seg_data