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 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); }
// 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 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 ()); }
public void AttributeNormalizationWrapped () { // When XmlValidatingReader there used to be a problem. string xml = "<root attr=' value\nstring' />"; XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null); xtr.Normalization = true; XmlValidatingReader xvr = new XmlValidatingReader (xtr); xvr.Read (); xvr.MoveToFirstAttribute (); AssertEquals (" value string", xvr.Value); }
// 根据xml编辑框中的内容创建属性 void BuildAttrs() { //this.SetFreshValue(); Debug.Assert(m_attrsExpand == ExpandStyle.Collapse, "不是闭合状态不要用本函数"); NameTable nt = new NameTable(); // 创建名字空间 XmlNamespaceManager nsmgr = GatherOuterNamespaces( this, nt); XmlParserContext context = new XmlParserContext(nt, nsmgr, null, XmlSpace.None); string strAttrsXml = ""; // 2.得到attributes关闭时的text XmlText oText = this.GetAttributesText(); if (oText != null) { strAttrsXml = oText.Text.Trim(); if (strAttrsXml != "") strAttrsXml = " " + strAttrsXml; } else { Debug.Assert(false, "必须有text对象"); } string strFragmentXml = "<" + this.Name + strAttrsXml + "/>"; /* TextReader tr = new StringReader(strFragmentXml); XmlReaderSettings settings = new XmlReaderSettings(); settings..XmlResolver = resolver; XmlReader reader = XmlReader.Create(tr, settings, context); * */ // 过一段时间做XmlSchema校验 XmlValidatingReader reader = new XmlValidatingReader(strFragmentXml, XmlNodeType.Element, context); // 不根据schema进行校验 reader.ValidationType = ValidationType.None; this.attrs = new ItemList(); while(true) { if (reader.Read() == false) break; if (reader.MoveToFirstAttribute() == false) goto CONTINUE; while(true) { AttrItem attr = this.m_document.CreateAttrItem(reader.Name); attr.Initial(reader); this.AppendAttrInternal(attr,false,true); if (reader.MoveToNextAttribute() == false) break; } CONTINUE: break; } }
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); }