Beispiel #1
0
        /// <summary> Populates the given group object with data from the given group element, ignoring
        /// any unrecognized nodes.
        /// </summary>
        private void Parse(IGroup groupObject, XmlElement groupElement)
        {
            var childNames  = groupObject.Names;
            var messageName = groupObject.Message.GetStructureName();

            var allChildNodes       = groupElement.ChildNodes;
            var unparsedElementList = new ArrayList();

            for (var i = 0; i < allChildNodes.Count; i++)
            {
                var node = allChildNodes.Item(i);
                var name = node.Name;
                if (Convert.ToInt16(node.NodeType) == (short)XmlNodeType.Element && !unparsedElementList.Contains(name))
                {
                    unparsedElementList.Add(name);
                }
            }

            // we're not too fussy about order here (all occurrences get parsed as repetitions) ...
            for (var i = 0; i < childNames.Length; i++)
            {
                SupportClass.ICollectionSupport.Remove(unparsedElementList, childNames[i]);
                ParseReps(groupElement, groupObject, messageName, childNames[i], childNames[i]);
            }

            for (var i = 0; i < unparsedElementList.Count; i++)
            {
                var segName      = (string)unparsedElementList[i];
                var segIndexName = groupObject.AddNonstandardSegment(segName);
                ParseReps(groupElement, groupObject, messageName, segName, segIndexName);
            }
        }
Beispiel #2
0
        // param childIndexName may have an integer on the end if >1 sibling with same name (e.g. NTE2)
        private void ParseReps(
            XmlElement groupElement,
            IGroup groupObject,
            string messageName,
            string childName,
            string childIndexName)
        {
            var reps = GetChildElementsByTagName(groupElement, MakeGroupElementName(messageName, childName));

            Log.Debug("# of elements matching " + MakeGroupElementName(messageName, childName) + ": " + reps.Count);

            if (groupObject.IsRepeating(childIndexName))
            {
                for (var i = 0; i < reps.Count; i++)
                {
                    ParseRep((XmlElement)reps[i], groupObject.GetStructure(childIndexName, i));
                }
            }
            else
            {
                if (reps.Count > 0)
                {
                    ParseRep((XmlElement)reps[0], groupObject.GetStructure(childIndexName, 0));
                }

                if (reps.Count > 1)
                {
                    var newIndexName = groupObject.AddNonstandardSegment(childName);
                    for (var i = 1; i < reps.Count; i++)
                    {
                        ParseRep((XmlElement)reps[i], groupObject.GetStructure(newIndexName, i - 1));
                    }
                }
            }
        }
Beispiel #3
0
 /// <summary> Sets the next position to a new segment of the given name, within the
 /// given group.
 /// </summary>
 private void NewSegment(IGroup parent, string name)
 {
     Log.Info("MessageIterator creating new segment: " + name);
     parent.AddNonstandardSegment(name);
     nextRenamedField = new Position(parent, parent.Names[parent.Names.Length - 1], 0);
 }