Exemple #1
0
        /// <summary>
        /// read through XML tags until we reach either:
        /// 1 - Start of targetTag
        /// 2 - End of outerTag or empty outerTag was read
        /// 3 - End of XML file
        /// While 2 or 3 have not occured, it repeats to execute tagReader
        /// Returns false if 2 or 3 happens, true in case of 1
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="targetTag"></param>
        /// <param name="outerTag"></param>
        public static bool ProcessTag(XmlReader reader, string targetTag, string outerTag, TagReaderDelegate tagReader)
        {
            while (!((reader.EOF) ||
                     (reader.Name == targetTag && reader.NodeType == XmlNodeType.Element) ||
                     (outerTag != null && reader.Name == outerTag && reader.NodeType == XmlNodeType.EndElement)))
            {
                if ((outerTag != null && reader.Name == outerTag && reader.IsEmptyElement))
                {
                    return(false);
                }

                reader.Read();
            }

            if (reader.Name == targetTag && reader.NodeType == XmlNodeType.Element)
            {
                //run tagReader and go for the next occurence of 'targetTag' within outerTag
                tagReader();

                return(true);
            }

            return(false);
        }
Exemple #2
0
        /// <summary>
        /// read through XML tags until we reach either:
        /// 1 - Start of targetTag
        /// 2 - End of outerTag
        /// 3 - End of XML file
        /// While 2 or 3 have not occured, it repeats to execute tagReader
        /// Returns false if 2 or 3 happens, true in case of 1
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="targetTag"></param>
        /// <param name="outerTag"></param>
        public static void ProcessTagArray(XmlReader reader, string targetTag, string outerTag, TagReaderDelegate tagReader)
        {
            while (true)
            {
                bool processed = ProcessTag(reader, targetTag, outerTag, tagReader);

                //exit if outerTag is seen or document is finished
                if (!processed)
                {
                    return;
                }
                else
                {
                    reader.Read();  //move to the next item so ProcessTag will continue to next tag
                }
            }
        }