public void TestValidationEvent()
        {
            string intSubset = "<!ELEMENT root EMPTY><!ATTLIST root foo CDATA 'foo-def' bar CDATA 'bar-def'>";
            string dtd       = "<!DOCTYPE root [" + intSubset + "]>";
            string xml       = dtd + "<foo><bar att='val' /></foo>";

            eventFired = false;
            dvr        = PrepareXmlReader(xml);
            dvr.ValidationEventHandler += new ValidationEventHandler(OnInvalidityFound);
            dvr.ValidationType          = ValidationType.DTD;
            dvr.Read();                 // DTD
            Assert.IsTrue(dvr.Read());  // invalid foo
            Assert.IsTrue(eventFired);
            Assert.AreEqual("foo", dvr.Name);
            Assert.IsTrue(dvr.Read());                  // invalid bar
            Assert.AreEqual("bar", dvr.Name);
            Assert.IsTrue(dvr.MoveToFirstAttribute());  // att
            Assert.AreEqual("att", dvr.Name);
            Assert.IsTrue(dvr.Read());                  // invalid end foo
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual(XmlNodeType.EndElement, dvr.NodeType);
            Assert.IsTrue(!dvr.Read());

            // When ValidationType is None, event should not be fired,
            eventFired = false;
            dvr        = PrepareXmlReader(xml);
            dvr.ValidationEventHandler += new ValidationEventHandler(OnInvalidityFound);
            dvr.ValidationType          = ValidationType.None;
            dvr.Read();                 // DTD
            Assert.IsTrue(dvr.Read());  // invalid foo
            Assert.IsTrue(!eventFired);
        }
        public void TestNormalization()
        {
            string intSubset = "<!ELEMENT root EMPTY>"
                               + "<!ATTLIST root foo ID #REQUIRED"
                               + " bar NMTOKEN #IMPLIED "
                               + " baz NMTOKENS #IMPLIED "
                               + " quux CDATA #IMPLIED >";
            string dtd = "<!DOCTYPE root [" + intSubset + "]>";
            string xml = dtd + "<root foo=' id1 ' bar='  nameToken  ' baz=' list  of\r\nname token' quux=' quuux\tquuux\t ' />";

            dvr = PrepareXmlReader(xml);
            ((XmlTextReader)dvr.Reader).Normalization = true;
            dvr.EntityHandling = EntityHandling.ExpandEntities;
            dvr.Read();                 // DTD
            dvr.Read();
            Assert.AreEqual(XmlNodeType.Element, dvr.NodeType);
            Assert.AreEqual("root", dvr.Name);
            Assert.IsTrue(dvr.MoveToFirstAttribute());
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual("id1", dvr.Value);
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("bar", dvr.Name);
            Assert.AreEqual("nameToken", dvr.Value);
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("baz", dvr.Name);
            Assert.AreEqual("list of name token", dvr.Value);
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("quux", dvr.Name);
            Assert.AreEqual(" quuux quuux  ", dvr.Value);
        }
Example #3
0
        static void Main(string[] args)
        {
            // Create a cache of schemas, and add two schemas
            XmlSchemaCollection sc = new XmlSchemaCollection();

            sc.Add("urn:MyUri", "../../../doctors.xsd");
            //sc.Add("", "../../../doctors.xsd");

            // Create a validating reader object
            XmlTextReader       tr = new XmlTextReader("../../../doctors.xml");
            XmlValidatingReader vr = new XmlValidatingReader(tr);

            // Specify the type of validation required
            vr.ValidationType = ValidationType.Schema;

            // Tell the validating reader to use the schema collection
            vr.Schemas.Add(sc);

            // Register a validation event handler method
            vr.ValidationEventHandler += new ValidationEventHandler(MyHandler);

            // Read and validate the XML document
            try
            {
                int   num     = 0;
                float avg_age = 0;
                while (vr.Read())
                {
                    if (vr.NodeType == XmlNodeType.Element &&
                        vr.LocalName == "P")
                    {
                        num++;

                        vr.MoveToFirstAttribute();
                        Console.WriteLine(vr.Value);
                        vr.MoveToNextAttribute();
                        vr.MoveToNextAttribute();
                        string val = vr.Value;
                        if (val != "male" && val != "female")
                        {
                            //Console.WriteLine(val);
                            avg_age += Convert.ToInt32(vr.Value);
                        }

                        vr.MoveToElement();
                    }
                }

                Console.WriteLine("Number of Passengers: " + num + "\n");
                Console.WriteLine("Average age: " + avg_age / num + "\n");
            }
            catch (XmlException ex)
            {
                Console.WriteLine("XMLException occurred: " + ex.Message);
            }
            finally
            {
                vr.Close();
            }
        }
Example #4
0
        static void Main(string[] args)
        {
            XmlSchemaCollection sc = new XmlSchemaCollection();

            sc.Add("", "../../../../visual_studio_schema_test.xsd");

            // Create a validating reader object
            XmlTextReader tr = new XmlTextReader("../../../../test_xml.xml");
            //XmlTextReader tr = new XmlTextReader("../../../../xml_test_wrong_atrib.xml");
            //XmlTextReader tr = new XmlTextReader("../../../../xml_test_wrong_root.xml");
            XmlValidatingReader vr = new XmlValidatingReader(tr);

            // Specify the type of validation required
            vr.ValidationType = ValidationType.Schema;

            // Tell the validating reader to use the schema collection
            vr.Schemas.Add(sc);

            // Register a validation event handler method
            vr.ValidationEventHandler += new ValidationEventHandler(MyHandler);

            // Read and validate the XML document
            try
            {
                int num = 0;
                while (vr.Read())
                {
                    if (vr.NodeType == XmlNodeType.Element &&
                        vr.LocalName == "Games")
                    {
                        num++;

                        vr.MoveToFirstAttribute();
                        Console.WriteLine(vr.Value);
                        vr.MoveToNextAttribute();
                        Console.WriteLine(vr.Value);
                        vr.MoveToNextAttribute();
                        Console.WriteLine(vr.Value);
                        vr.MoveToNextAttribute();
                        Console.WriteLine(vr.Value);
                        vr.MoveToNextAttribute();
                        Console.WriteLine(vr.Value);

                        vr.MoveToElement();
                    }
                }

                Console.WriteLine("Number of strings: " + num + "\n");
            }
            catch (XmlException ex)
            {
                Console.WriteLine("XMLException occurred: " + ex.Message);
            }
            finally
            {
                vr.Close();
            }
        }
Example #5
0
    public static void Main()
    {
        //Create the validating reader.
        XmlTextReader       txtreader = new XmlTextReader("attrs.xml");
        XmlValidatingReader reader    = new XmlValidatingReader(txtreader);

        //Read the genre attribute.
        reader.MoveToContent();
        reader.MoveToFirstAttribute();
        string genre = reader.Value;

        Console.WriteLine("The genre value: " + genre);

        //Close the reader.
        reader.Close();
    }
        public void TestExpandEntity()
        {
            string intSubset = "<!ELEMENT root (#PCDATA)><!ATTLIST root foo CDATA 'foo-def' bar CDATA 'bar-def'><!ENTITY ent 'entity string'>";
            string dtd       = "<!DOCTYPE root [" + intSubset + "]>";
            string xml       = dtd + "<root foo='&ent;' bar='internal &ent; value'>&ent;</root>";

            dvr = PrepareXmlReader(xml);
            dvr.EntityHandling = EntityHandling.ExpandEntities;
            dvr.Read();                 // DTD
            dvr.Read();
            Assert.AreEqual(XmlNodeType.Element, dvr.NodeType);
            Assert.AreEqual("root", dvr.Name);
            Assert.IsTrue(dvr.MoveToFirstAttribute());
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual("entity string", dvr.Value);
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("bar", dvr.Name);
            Assert.AreEqual("internal entity string value", dvr.Value);
            Assert.AreEqual("entity string", dvr.ReadString());

            // ValidationType = None

            dvr = PrepareXmlReader(xml);
            dvr.EntityHandling = EntityHandling.ExpandEntities;
            dvr.ValidationType = ValidationType.None;
            dvr.Read();                 // DTD
            dvr.Read();
            Assert.AreEqual(XmlNodeType.Element, dvr.NodeType);
            Assert.AreEqual("root", dvr.Name);

            Assert.IsTrue(dvr.MoveToFirstAttribute());
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual("entity string", dvr.Value);

            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("bar", dvr.Name);
            Assert.AreEqual("internal entity string value", dvr.Value);
            Assert.AreEqual("entity string", dvr.ReadString());
        }
        // it used to be regarded as MS bug but it was not really.
        public void TestPreserveEntityNotOnDotNet()
        {
            string intSubset = "<!ELEMENT root EMPTY><!ATTLIST root foo CDATA 'foo-def' bar CDATA 'bar-def'><!ENTITY ent 'entity string'>";
            string dtd       = "<!DOCTYPE root [" + intSubset + "]>";
            string xml       = dtd + "<root foo='&ent;' bar='internal &ent; value' />";

            dvr = PrepareXmlReader(xml);
            dvr.EntityHandling = EntityHandling.ExpandCharEntities;
            dvr.Read();                 // DTD
            dvr.Read();
            Assert.AreEqual(XmlNodeType.Element, dvr.NodeType);
            Assert.AreEqual("root", dvr.Name);
            Assert.IsTrue(dvr.MoveToFirstAttribute());
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual("entity string", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(!dvr.ReadAttributeValue());

            // bar
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("bar", dvr.Name);
            Assert.AreEqual("internal entity string value", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual("internal ", dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual(" value", dvr.Value);

            // ValidationType = None

            dvr = PrepareXmlReader(xml);
            dvr.EntityHandling = EntityHandling.ExpandCharEntities;
            dvr.ValidationType = ValidationType.None;
            dvr.Read();                 // DTD
            dvr.Read();
            Assert.AreEqual(XmlNodeType.Element, dvr.NodeType);
            Assert.AreEqual("root", dvr.Name);

            // foo
            Assert.IsTrue(dvr.MoveToFirstAttribute());
            Assert.AreEqual("foo", dvr.Name);
            Assert.AreEqual("entity string", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(!dvr.ReadAttributeValue());

            // bar
            Assert.IsTrue(dvr.MoveToNextAttribute());
            Assert.AreEqual("bar", dvr.Name);
            Assert.AreEqual("internal entity string value", dvr.Value);
            //  ReadAttributeValue()
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual("internal ", dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.EntityReference, dvr.NodeType);
            Assert.AreEqual("ent", dvr.Name);
            Assert.AreEqual(String.Empty, dvr.Value);
            Assert.IsTrue(dvr.ReadAttributeValue());
            Assert.AreEqual(XmlNodeType.Text, dvr.NodeType);
            Assert.AreEqual(String.Empty, dvr.Name);
            Assert.AreEqual(" value", dvr.Value);
        }