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); }
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(); } }
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(); } }
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); }