/// <summary> /// Parse EDIFACT UNG header /// </summary> /// <param name="input">Input string</param> /// <param name="dataElementSeparator">Data element separator</param> /// <param name="releaseIndicator">Release indicator</param> /// <param name="componentDataElementSeparator">Component data element separator</param> /// <param name="segmentTerminator">Segment terminator</param> /// <returns>XML document with structure from headers.xsd EDIFACT UNA header description</returns> public static HeadersUNG ParseEDIFACTUNGHeader( string input, string dataElementSeparator, string releaseIndicator, string componentDataElementSeparator, string segmentTerminator ) { if (input == null) { return(null); } HeadersUNG _UNGHeader = new HeadersUNG(); Regex _UNGRegex = new Regex(CreateParsePattern(_UNGGenericPattern, dataElementSeparator, releaseIndicator, componentDataElementSeparator, segmentTerminator)); Match _UNGMatch = _UNGRegex.Match(input); string _escapedReleaseIndicator = EscapeRegexCharacter(releaseIndicator); try { if (_UNGMatch != null) { // If headers.xsd was changed, change appropriate fields for new values _UNGHeader.UNG1 = _UNGMatch.Groups["FunctionalGroupIdentification"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG2 = new HeadersUNGUNG2(); _UNGHeader.UNG2.UNG21 = _UNGMatch.Groups["SenderIdentification"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG2.UNG22 = _UNGMatch.Groups["SenderIdentificationCodeQualifier"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG3 = new HeadersUNGUNG3(); _UNGHeader.UNG3.UNG31 = _UNGMatch.Groups["RecipientIdentification"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG3.UNG32 = _UNGMatch.Groups["RecipientIdentificationCodeQualifier"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG4 = new HeadersUNGUNG4(); _UNGHeader.UNG4.UNG41 = _UNGMatch.Groups["Date"].ToString(); _UNGHeader.UNG4.UNG42 = _UNGMatch.Groups["Time"].ToString(); _UNGHeader.UNG5 = _UNGMatch.Groups["FunctionalGroupReferenceNumber"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG6 = _UNGMatch.Groups["ControllingAgency"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG7 = new HeadersUNGUNG7(); _UNGHeader.UNG7.UNG71 = _UNGMatch.Groups["MessageVersionNumber"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG7.UNG72 = _UNGMatch.Groups["MessageReleaseNumber"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG7.UNG73 = _UNGMatch.Groups["AssociationAssignedCode"].ToString().Replace(_escapedReleaseIndicator, String.Empty); _UNGHeader.UNG8 = _UNGMatch.Groups["ApplicationPassword"].ToString().Replace(_escapedReleaseIndicator, String.Empty); return(_UNGHeader); } else { throw new ApplicationException("Can't parse a message. Not enough parsing elements found."); } } catch (Exception ex) { throw new ApplicationException(string.Format("Failed to parse UNB header. Reason: {0}", ex.Message), ex); } }
/// <summary> /// This method serializes EDIFACT headers UNA, UNB and UNG to an XML document, so each segment is an element and is wrapped around header elements /// </summary> /// <param name="stringHeaderUNA">String with a UNA segment</param> /// <param name="stringHeaderUNB">String with a UNA segment</param> /// <param name="stringHeaderUNG">String with a UNA segment</param> /// <returns>XmlDocument representation of a UNA, UNB and UNG headers</returns> public static XmlDocument SerializeEDIFACTHeaders(string stringHeaderUNA, string stringHeaderUNB, string stringHeaderUNG) { HeadersUNA headerUNA = null; HeadersUNB headerUNB = null; HeadersUNG headerUNG = null; string DataElementSeparator = string.Empty; string ReleaseIndicator = string.Empty; string ComponentDataElementSeparator = string.Empty; string SegmentSeparator = string.Empty; if (!string.IsNullOrEmpty(stringHeaderUNA)) { headerUNA = MessageEnrichmentLibrary.EDIHeaders.ParseEDIFACTUNAHeader( stringHeaderUNA, out DataElementSeparator, out ReleaseIndicator, out ComponentDataElementSeparator, out SegmentSeparator ); } else { headerUNA = new HeadersUNA(); headerUNA.UNA2 = "+"; headerUNA.UNA4 = "?"; headerUNA.UNA1 = ":"; headerUNA.UNA6 = "'"; headerUNA.UNA3 = ","; headerUNA.UNA5 = "*"; DataElementSeparator = headerUNA.UNA2; ReleaseIndicator = headerUNA.UNA4; ComponentDataElementSeparator = headerUNA.UNA1; SegmentSeparator = headerUNA.UNA6; } headerUNB = MessageEnrichmentLibrary.EDIHeaders.ParseEDIFACTUNBHeader( stringHeaderUNB, DataElementSeparator, ReleaseIndicator, ComponentDataElementSeparator, SegmentSeparator ); if (!string.IsNullOrEmpty(stringHeaderUNG)) { headerUNG = MessageEnrichmentLibrary.EDIHeaders.ParseEDIFACTUNGHeader( stringHeaderUNG, DataElementSeparator, ReleaseIndicator, ComponentDataElementSeparator, SegmentSeparator ); } // Skip xml declaration for a newly created documents StringBuilder _newXML = new StringBuilder(); XmlWriterSettings _settings = new XmlWriterSettings(); _settings.OmitXmlDeclaration = true; // Compose result document XmlWriter _writer = XmlWriter.Create(_newXML, _settings); _writer.WriteStartElement(_headersPrefix, _headersName, _headersNamespace); _writer.WriteRaw(XmlToString(Serialize(headerUNA))); _writer.WriteRaw(XmlToString(Serialize(headerUNB))); if (headerUNG != null) { _writer.WriteRaw(XmlToString(Serialize(headerUNG))); } _writer.WriteEndElement(); _writer.Flush(); XmlDocument _newDocument = new XmlDocument(); _newDocument.LoadXml(_newXML.ToString()); return(_newDocument); }