Пример #1
0
    public static void Main()
    {
        XmlNodeReader reader = null;

        try
        {
            //Create and load the XML document.
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<!-- sample XML -->" +
                        "<book>" +
                        "<title>Pride And Prejudice</title>" +
                        "<price>19.95</price>" +
                        "</book>");

            //Load the XmlNodeReader
            reader = new XmlNodeReader(doc);

            reader.MoveToContent();                   //Move to the book node.
            reader.Read();                            //Read the book start tag.
            reader.Skip();                            //Skip the title element.

            Console.WriteLine(reader.ReadOuterXml()); //Read the price element.
        }

        finally
        {
            if (reader != null)
            {
                reader.Close();
            }
        }
    }
Пример #2
0
        public void NodeReaderSkipWithSimpleXml()
        {
            XmlNodeReader nodeReader = NodeReaderTestHelper.CreateNodeReader("<root atri='val'><child /></root>");

            Assert.True(nodeReader.Read());
            nodeReader.Skip();
            Assert.True(nodeReader.EOF);
            Assert.Equal(ReadState.EndOfFile, nodeReader.ReadState);
            Assert.Equal(XmlNodeType.None, nodeReader.NodeType);
        }
Пример #3
0
    public static void Main()
    {
        XmlNodeReader reader = null;

        try
        {
            //Create and load an XML document.
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<!DOCTYPE book [<!ENTITY h 'hardcover'>]>" +
                        "<book>" +
                        "<title>Pride And Prejudice</title>" +
                        "<misc>&h;</misc>" +
                        "</book>");

            //Create the reader.
            reader = new XmlNodeReader(doc);

            reader.MoveToContent(); //Move to the root element.
            reader.Read();          //Move to title start tag.
            reader.Skip();          //Skip the title element.

            //Read the misc start tag.  The reader is now positioned on
            //the entity reference node.
            reader.ReadStartElement();

            //You must call ResolveEntity to expand the entity reference.
            //The entity replacement text is then parsed and returned as a child node.
            Console.WriteLine("Expand the entity...");
            reader.ResolveEntity();

            Console.WriteLine("The entity replacement text is returned as a text node.");
            reader.Read();
            Console.WriteLine("NodeType: {0} Value: {1}", reader.NodeType, reader.Value);

            Console.WriteLine("An EndEntity node closes the entity reference scope.");
            reader.Read();
            Console.WriteLine("NodeType: {0} Name: {1}", reader.NodeType, reader.Name);
        }
        finally
        {
            if (reader != null)
            {
                reader.Close();
            }
        }
    }
Пример #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="source"></param>
        /// <param name="propertyDescriptors"></param>
        /// <param name="destination"></param>
        /// <returns></returns>
        public object Deserialize(XmlDocument source, DbQueryPropertyDescriptors propertyDescriptors, object destination)
        {
            if (null != source && null != destination)
            {
                using (var _reader = new XmlNodeReader(source.FirstChild))
                {
                    //Fisrt node should be skipped.
                    _reader.Skip();

                    Deserialize(_reader, propertyDescriptors, destination);

                    _reader.Close();
                    _reader.Dispose();
                }

                return(destination);
            }

            return(null);
        }
        public override void Skip()
        {
            if (IsXmlDataNode)
            {
                xmlNodeReader.Skip();
            }
            else
            {
                if (ReadState != ReadState.Interactive)
                {
                    return;
                }

                MoveToElement();
                if (IsElementNode(internalNodeType))
                {
                    int depth = 1;
                    while (depth != 0)
                    {
                        if (!Read())
                        {
                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(SR.InvalidXmlDeserializingExtensionData));
                        }

                        if (IsElementNode(internalNodeType))
                        {
                            depth++;
                        }
                        else if (internalNodeType == ExtensionDataNodeType.EndElement)
                        {
                            ReadEndElement();
                            depth--;
                        }
                    }
                }
                else
                {
                    Read();
                }
            }
        }
Пример #6
0
        public override void Skip()
        {
            if (IsXmlDataNode)
            {
                _xmlNodeReader.Skip();
            }
            else
            {
                if (ReadState != ReadState.Interactive)
                {
                    return;
                }
                MoveToElement();
                if (IsElementNode(_internalNodeType))
                {
                    int depth = 1;
                    while (depth != 0)
                    {
                        if (!Read())
                        {
                            throw new XmlException(SRSerialization.InvalidXmlDeserializingExtensionData);
                        }

                        if (IsElementNode(_internalNodeType))
                        {
                            depth++;
                        }
                        else if (_internalNodeType == ExtensionDataNodeType.EndElement)
                        {
                            ReadEndElement();
                            depth--;
                        }
                    }
                }
                else
                {
                    Read();
                }
            }
        }
        /// <summary>
        /// Parses an IM log file and sends the information to GDS
        /// </summary>
        /// <param name="logFile">The IM conversations log file</param>
        /// <param name="lastIndexed">messages older than this will not be sent to GDS</param>
        private void ParseAndSendMessages(string logFile, DateTime lastIndexed)
        {
            XmlDocument doc = new XmlDocument();

            doc.Load(logFile);
            XmlNodeReader reader = new XmlNodeReader(doc);

            // reset user and buddy name
            userName  = null;
            buddyName = null;

            // Moves the reader to the root element.
            reader.MoveToContent();

            // move to the first message
            reader.Read();

            while (reader.LocalName == "Message")
            {
                // check the date of the message - if older skip
                reader.MoveToAttribute("DateTime");
                DateTime messageDateTime = DateTime.Parse(reader.Value);
                reader.MoveToElement();

                // if older than the last indexing time, skip the message
                if (messageDateTime.CompareTo(lastIndexed) <= 0)
                {
                    reader.Skip();
                    continue;
                }

                // get message data
                MSNMessageData messageData = ParseMessageData(reader.ReadOuterXml());

                // send this message to GDS for indexing
                SendMessageData(messageData);
            }
        }
Пример #8
0
        public Object ToObjct <T>(String binaryString)
        {
            XmlReader  reader_tmp;
            MethodInfo method;
            MethodInfo generic;

            XmlNode xmlDoc = xml.CreateElement("root");

            xmlDoc.InnerXml = binaryString;
            XmlReader reader = new XmlNodeReader(xmlDoc);

            reader.MoveToContent();
            reader.Read();



            if (reader.Value == "null")
            {
                return(null);
            }
            if (typeof(T) == typeof(DateTime))
            {
                while (reader.Name == "Value" || reader.NodeType != XmlNodeType.Text)
                {
                    reader.Read();
                }
                return
                    (Convert.ChangeType(
                         DateTime.ParseExact(reader.Value, "yyyy-MM-ddTHH:mm:ss.fffffffzzz", CultureInfo.InvariantCulture), typeof(T)));
            }
            if (typeof(T).IsPrimitive || typeof(T) == typeof(String))
            {
                while (reader.NodeType != XmlNodeType.Text && reader.GetAttribute("IsEmptyStr") != "true")
                {
                    reader.Read();
                }
                T tmpVar = (T)Convert.ChangeType(reader.Value, typeof(T));

                var asStr = tmpVar as string;
                if (asStr != null && (tmpVar as string) == "null")
                {
                    tmpVar = default(T);
                }


                //reader.ReadToFollowing("Value");
                //reader.Read();
                return(tmpVar);
            }
            if (typeof(T).IsArray)
            {
                while (reader.GetAttribute("IsArray") == null)
                {
                    reader.Read();
                }
                int size = Convert.ToInt32(reader.GetAttribute("Len"));
                reader.Read();

                var array = Array.CreateInstance(typeof(T).GetElementType(), size);


                for (int i = 0; i < size; i++)
                {
                    reader_tmp = reader.ReadSubtree();
                    reader_tmp.MoveToContent();

                    method  = typeof(Serial).GetMethod("ToObjct");
                    generic = method.MakeGenericMethod(Type.GetType(reader.GetAttribute("Type")));

                    var tmpint = generic.Invoke(this, new object[] { reader_tmp.ReadOuterXml() });
                    array.SetValue(tmpint, i);
                    reader.Read();
                }
                Convert.ChangeType(array, typeof(T));
                return(array);
            }
            T ReturnObject;

            ReturnObject = (T)Activator.CreateInstance(typeof(T));

            if (reader.Name == "RefToId" || reader.GetAttribute("IsToId") == "true")
            {
                if (reader.Name == "RefToId")
                {
                    var tmp = relList[Convert.ToInt32(reader.Value)];

                    reader.Skip();
                    return(tmp);
                }
                else if (reader.GetAttribute("IsToId") == "true")
                {
                    var tmp = relList[Convert.ToInt32(reader.GetAttribute("ToId"))];
                    reader.Skip();
                    reader.Read();
                    return(tmp);
                }
            }

            if (Id == 0)
            {
                relList.Add(0, ReturnObject);
                Id = -1;
            }
            else
            {
                if (Convert.ToInt32(reader.GetAttribute("Id")) == 0)
                {
                    return(null);
                }
                if (!relList.ContainsKey(Convert.ToInt32(reader.GetAttribute("Id"))))
                {
                    relList.Add(Convert.ToInt32(reader.GetAttribute("Id")), ReturnObject);
                }
            }



            FieldInfo[] fi =
                ReturnObject.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);


            for (int i = 0; i < fi.Length; i++)
            {
                while (reader.NodeType == XmlNodeType.EndElement || reader.Name != GetCleanFieldName(fi[i]))
                {
                    reader.Read();
                }

                if (IsReferenceType(fi[i].FieldType) && fi[i].FieldType != typeof(DateTime))
                {
                    bool RefFlag  = false;
                    bool ToIdFlag = false;
                    int  id;
                    int  toId;
                    while (!(reader.GetAttribute("IsReference") == "true" ||
                             reader.GetAttribute("IsToId") == "true" ||
                             reader.Name == "RefToId" ||
                             reader.Value == "null") ||
                           reader.NodeType == XmlNodeType.EndElement)
                    {
                        reader.Read();
                    }
                    if (reader.Value == "null")
                    {
                        return(null);
                    }
                    RefFlag  = reader.Name == "RefToId";
                    ToIdFlag = reader.GetAttribute("IsToId") == "true";
                    id       = Convert.ToInt32(reader.GetAttribute("Id"));
                    toId     = Convert.ToInt32(reader.GetAttribute("ToId"));


                    method  = typeof(Serial).GetMethod("ToObjct");
                    generic = method.MakeGenericMethod(fi[i].FieldType);



                    if (RefFlag)
                    {
                        var tmp = relList[Convert.ToInt32(reader.Value)];
                        fi[i].SetValue(ReturnObject, tmp);
                        reader.Skip();
                        reader.Read();
                    }
                    else if (ToIdFlag)
                    {
                        var tmp = relList[toId];
                        fi[i].SetValue(ReturnObject, tmp);
                        reader.Skip();
                    }
                    else
                    {
                        reader_tmp = reader.ReadSubtree();
                        reader_tmp.MoveToContent();


                        var tmp = generic.Invoke(this, new object[] { reader_tmp.ReadOuterXml() });
                        fi[i].SetValue(ReturnObject, tmp);
                    }


                    continue;
                }


                if (reader.Name != GetCleanFieldName(fi[i]))
                {
                    reader.ReadToFollowing(GetCleanFieldName(fi[i]));
                }
                reader_tmp = reader.ReadSubtree();
                reader_tmp.MoveToContent();
                method  = typeof(Serial).GetMethod("ToObjct");
                generic = method.MakeGenericMethod(fi[i].FieldType);

                var tmpint = generic.Invoke(this, new object[] { reader_tmp.ReadOuterXml() });
                fi[i].SetValue(ReturnObject, tmpint);
            }

            return(ReturnObject);
        }
Пример #9
0
        private void ExecuteSection(XmlNode section)
        {
            using (XmlNodeReader readerXML = new XmlNodeReader(section))
            {
                try
                {
                    Dictionary <String, String> actionParameters = new Dictionary <String, String>();
                    while (readerXML.Read())
                    {
                        actionParameters.Clear();
                        while (readerXML.MoveToNextAttribute())
                        {
                            actionParameters.Add(readerXML.Name, readerXML.Value);
                        }
                        readerXML.MoveToElement();
                        switch (readerXML.NodeType)
                        {
                        case XmlNodeType.Element:
                            switch (readerXML.Name)
                            {
                            case "True":
                                if (!_activeRuleSets.Peek().EngineState.ConditionalStack.Peek())
                                {
                                    readerXML.Skip();
                                }
                                break;

                            case "False":
                                if (_activeRuleSets.Peek().EngineState.ConditionalStack.Peek())
                                {
                                    readerXML.Skip();
                                }
                                break;

                            case "Optional":
                                if (MessageBox.Show(String.Format("Would you like to process {0} optional section?", actionParameters.ContainsKey("Name") ? actionParameters["Name"] : "the following"), "Optional Section Execution Confirmation", MessageBoxButton.YesNo) == MessageBoxResult.No)
                                {
                                    readerXML.Skip();
                                }
                                break;

                            default:
                                ExecuteElementStartRule(readerXML.Name, actionParameters);
                                break;
                            }
                            break;

                        case XmlNodeType.EndElement:
                            switch (readerXML.Name)
                            {
                            case "True":
                            case "False":
                            case "Optional":
                                break;

                            default:
                                ExecuteElementEndRule(readerXML.Name);
                                break;
                            }
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                }
            }
        }