private static bool isValid = true; // If a validation error occurs, // set this flag to false in the // validation event handler. static void Main(string[] args) { XmlTextReader r = new XmlTextReader(@"..\..\GenKeyIDList.xml"); XmlValidatingReader v = new XmlValidatingReader(r); v.ValidationType = ValidationType.Schema; v.ValidationEventHandler += new ValidationEventHandler(MyValidationEventHandler); while (v.Read()) { // Can add code here to process the content. Console.WriteLine(v.LocalName); if (v.LocalName == "GenericKeyIDList") { if(v.IsStartElement()) { v.MoveToFirstAttribute(); v.ReadAttributeValue(); Console.WriteLine(" " + v.ReadContentAsString()); } } } v.Close(); // Check whether the document is valid or invalid. if (isValid) { Console.WriteLine("Document is valid"); } else { Console.WriteLine("Document is invalid"); } }
public void ResolveEntityReadAttributeValue () { string dtd = "<!DOCTYPE root [<!ELEMENT root (#PCDATA)*><!ATTLIST root attr CDATA #REQUIRED><!ENTITY ent 'entity string'>]>"; string xml = dtd + "<root attr='&ent; text'>&ent;</root>"; dvr = new XmlValidatingReader (xml, XmlNodeType.Document, null); dvr.Read (); // doctype dvr.Read (); // root dvr.MoveToAttribute (0); // attr Assert.IsTrue (dvr.ReadAttributeValue ()); // Should read expanded text Assert.AreEqual (XmlNodeType.Text, dvr.NodeType); // not EntityReference Assert.AreEqual ("entity string text", dvr.Value); Assert.IsTrue (!dvr.ReadAttributeValue ()); }
// 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); }
public void TestReadTypedAttributeValue () { string xml = "<root attr='12'></root>"; XmlSchema schema = new XmlSchema (); XmlSchemaElement elem = new XmlSchemaElement (); elem.Name = "root"; XmlSchemaComplexType ct = new XmlSchemaComplexType (); XmlSchemaAttribute attr = new XmlSchemaAttribute (); attr.Name = "attr"; attr.SchemaTypeName = new XmlQualifiedName ("int", XmlSchema.Namespace); ct.Attributes.Add (attr); elem.SchemaType = ct; schema.Items.Add (elem); xvr = PrepareXmlReader (xml); xvr.Schemas.Add (schema); xvr.Read (); Assert.AreEqual ("root", xvr.Name); Assert.IsTrue (xvr.MoveToNextAttribute ()); // attr Assert.AreEqual ("attr", xvr.Name); XmlSchemaDatatype dt = xvr.SchemaType as XmlSchemaDatatype; Assert.IsNotNull (dt); Assert.AreEqual (typeof (int), dt.ValueType); Assert.AreEqual (XmlTokenizedType.None, dt.TokenizedType); object o = xvr.ReadTypedValue (); Assert.AreEqual (XmlNodeType.Attribute, xvr.NodeType); Assert.AreEqual (typeof (int), o.GetType ()); int n = (int) o; Assert.AreEqual (12, n); Assert.IsTrue (xvr.ReadAttributeValue ()); // can read = seems not proceed. }
public void TestPreserveEntity () { 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 (); AssertEquals (XmlNodeType.Element, dvr.NodeType); AssertEquals ("root", dvr.Name); Assert (dvr.MoveToFirstAttribute ()); AssertEquals ("foo", dvr.Name); // MS BUG: it returns "entity string", however, entity should not be exanded. // ReadAttributeValue() Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.EntityReference, dvr.NodeType); AssertEquals ("ent", dvr.Name); AssertEquals ("", dvr.Value); Assert (!dvr.ReadAttributeValue ()); // bar Assert (dvr.MoveToNextAttribute ()); AssertEquals ("bar", dvr.Name); // ReadAttributeValue() Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.Text, dvr.NodeType); AssertEquals ("", dvr.Name); AssertEquals ("internal ", dvr.Value); Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.EntityReference, dvr.NodeType); AssertEquals ("ent", dvr.Name); AssertEquals ("", dvr.Value); Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.Text, dvr.NodeType); AssertEquals ("", dvr.Name); AssertEquals (" value", dvr.Value); // ValidationType = None dvr = PrepareXmlReader (xml); dvr.EntityHandling = EntityHandling.ExpandCharEntities; dvr.ValidationType = ValidationType.None; dvr.Read (); // DTD dvr.Read (); AssertEquals (XmlNodeType.Element, dvr.NodeType); AssertEquals ("root", dvr.Name); // foo Assert (dvr.MoveToFirstAttribute ()); AssertEquals ("foo", dvr.Name); // ReadAttributeValue() Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.EntityReference, dvr.NodeType); AssertEquals ("ent", dvr.Name); AssertEquals ("", dvr.Value); Assert (!dvr.ReadAttributeValue ()); // bar Assert (dvr.MoveToNextAttribute ()); AssertEquals ("bar", dvr.Name); // ReadAttributeValue() Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.Text, dvr.NodeType); AssertEquals ("", dvr.Name); AssertEquals ("internal ", dvr.Value); Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.EntityReference, dvr.NodeType); AssertEquals ("ent", dvr.Name); AssertEquals ("", dvr.Value); Assert (dvr.ReadAttributeValue ()); AssertEquals (XmlNodeType.Text, dvr.NodeType); AssertEquals ("", dvr.Name); AssertEquals (" value", dvr.Value); }