Class: EDI::Message
- Inherits:
-
Object
- Object
- EDI::Message
- Defined in:
- lib/edi4r/rexml.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#to_xml(xel_parent) ⇒ Object
Build an XML document tree from a) the linear sequence of segments b) metadata from the standards DB (attached to each segment).
Class Method Details
.parse_xml(p, xmsg) ⇒ Object
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/edi4r/rexml.rb', line 156 def Message.parse_xml(p, xmsg) _header = xmsg.elements["Header/Segment"] _trailer = xmsg.elements["Trailer/Segment"] msg = p.( Segment.parse_xml( p, _header ) ) msg.header = Segment.parse_xml( msg, _header ) if _header xmsg.elements.each('descendant::Segment') do |xel| next if xel.parent.name =~ /Header|Trailer/ msg.add Segment.parse_xml(msg, xel) end msg.trailer = Segment.parse_xml( msg, _trailer ) if _trailer msg end |
Instance Method Details
#to_xml(xel_parent) ⇒ Object
Build an XML document tree from
a) the linear sequence of segments
b) metadata from the standards DB (attached to each segment)
Track xml parent element for segments by level
Add ‘header’ and ‘trailer’ wrapper element around
header and trailer, if any
Trigger segments and their depending segments get wrapped in a ‘SegmentGroup’ element that bears the group name as its name.
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/edi4r/rexml.rb', line 185 def to_xml( xel_parent ) xel_msg = REXML::Element.new( 'Message' ) xel_parent.elements << xel_msg # Default parent is XML message element itself # xel_parent_stack = Hash.new(xel_msg) xhd = to_xml_header( xel_msg ) each do |seg| next if seg.empty? if seg.is_tnode? xgrp = REXML::Element.new( 'SegmentGroup' ) xgrp.attributes["name"] = seg.sg_name xel_parent_stack[seg.level - 1] << xgrp seg.to_xml( xgrp ) xel_parent_stack[seg.level] = xgrp else seg.to_xml( xel_parent_stack[seg.level - 1] ) end end xtr = to_xml_trailer( xel_msg ) [xel_msg, xhd, xtr] end |