/// <summary> /// This method retrieves an XmlReader within a specified context. /// Moreover it collects label values before or after a geometry could be found. /// </summary> /// <param name="reader">An XmlReader instance that is the origin of a created sub-reader</param> /// <param name="labels">A dictionary for recording label values. Pass 'null' to ignore searching for label values</param> /// <param name="pathNodes">A list of <see cref="IPathNode"/> instances defining the context of the retrieved reader</param> /// <returns>A sub-reader of the XmlReader given as argument</returns> protected XmlReader GetSubReaderOf(XmlReader reader, Dictionary <string, string> labels, List <IPathNode> pathNodes) { string errorMessage = null; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (pathNodes[0].Matches(reader)) { pathNodes.RemoveAt(0); if (pathNodes.Count > 0) { return(GetSubReaderOf(reader.ReadSubtree(), null, pathNodes)); } return(reader.ReadSubtree()); } if (labels != null) { if (_LabelNode != null) { if (_LabelNode.Matches(reader)) { var labelName = reader.Name; var labelValue = reader.ReadString(); // remove the namespace if (labelName.Contains(":")) { labelName = labelName.Split(':')[1]; } labels.Add(labelName, labelValue); } } } if (_ServiceExceptionNode.Matches(reader)) { errorMessage = reader.ReadInnerXml(); Trace.TraceError("A service exception occured: " + errorMessage); throw new Exception("A service exception occured: " + errorMessage); } } } return(null); }
/// <summary> /// This method retrieves an XmlReader within a specified context. /// Moreover it collects label values before or after a geometry could be found. /// </summary> /// <param name="reader">An XmlReader instance that is the origin of a created sub-reader</param> /// <param name="labelValue">A string array for recording a found label value. Pass 'null' to ignore searching for label values</param> /// <param name="pathNodes">A list of <see cref="PathNodeDepr"/> instances defining the context of the retrieved reader</param> /// <returns>A sub-reader of the XmlReader given as argument</returns> protected XmlReader GetSubReaderOf(XmlReader reader, string[] labelValue, List <IPathNode> pathNodes) { string errorMessage = null; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (pathNodes[0].Matches(reader)) { pathNodes.RemoveAt(0); if (pathNodes.Count > 0) { return(GetSubReaderOf(reader.ReadSubtree(), null, pathNodes)); } return(reader.ReadSubtree()); } if (labelValue != null) { if (_LabelNode != null) { if (_LabelNode.Matches(reader)) { labelValue[0] = reader.ReadElementString(); } } } if (_ServiceExceptionNode.Matches(reader)) { errorMessage = reader.ReadInnerXml(); Trace.TraceError("A service exception occured: " + errorMessage); throw new Exception("A service exception occured: " + errorMessage); } } } return(null); }