class EdifactConverter::XML112EDI::XmlReader
Attributes
edifact[RW]
handler[RW]
state[RW]
Public Class Methods
new()
click to toggle source
# File lib/edifact_converter/xml112edi/xml_reader.rb, line 10 def initialize() self.edifact = EdiHandler.new self.handler = ChecksumHandler.new edifact end
Public Instance Methods
parse(xmlstr, properties)
click to toggle source
# File lib/edifact_converter/xml112edi/xml_reader.rb, line 15 def parse(xmlstr, properties) xml11 = if xmlstr.is_a? String Nokogiri::XML(xmlstr) { |config| config.nonet } else xmlstr end xml11.errors.each do |error| properties[:errors] << EdifactConverter::Message.from_syntax_error(error) end parse_xml xml11 end
Private Instance Methods
include_binaries(source)
click to toggle source
# File lib/edifact_converter/xml112edi/xml_reader.rb, line 76 def include_binaries(source) return source if edifact.binary.empty? source.force_encoding 'ASCII-8BIT' edifact.binary.each do |id, base64| start = source.index(id) source[start, id.size] = Base64.decode64(base64) end source end
parse_xml(xmlsrc)
click to toggle source
# File lib/edifact_converter/xml112edi/xml_reader.rb, line 29 def parse_xml(xmlsrc) xml = xmlsrc.dup return unless xml.root remove_grouping xml handler.startDocument xml.root.elements.each do |segment| handler.startSegment(segment.name) segment.elements.each do |element| handler.startElement() element.elements.each do |subelm| handler.value subelm.text end handler.endElement() end handler.endSegment() end handler.endDocument enc_converter = Encoding::Converter.new("utf-8", "iso-8859-1") edi_text = enc_converter.convert(edifact.edifact.string) include_binaries edi_text end
remove_grouping(xml)
click to toggle source
# File lib/edifact_converter/xml112edi/xml_reader.rb, line 51 def remove_grouping(xml) hidden, groups = [], [] xml.root.traverse do |element| case element.name when /^[S][0-9]{2}$/ if element['hidden'] hidden << element else groups << element end when "Brev" hidden << element when "BrevIndhold" hidden << element end end hidden.each { |elm| elm.replace elm.elements } groups.each do |elm| first = elm.first_element_child first.unlink elm.next = elm.elements first.parent = elm end end