public void ResolveEntityWithoutDTD () { document.RemoveAll (); string xml = "<root>&ent;&ent2;</root>"; XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null); xtr.Read (); document.AppendChild (document.ReadNode (xtr)); xtr.Close (); Assert.AreEqual (xml, document.OuterXml); XmlNodeReader nr = new XmlNodeReader (document); nr.Read (); // root nr.Read (); // &ent; Assert.AreEqual (XmlNodeType.EntityReference, nr.NodeType); // ent does not exist in this dtd. nr.ResolveEntity (); }
public void ResolveEntity () { string ent1 = "<!ENTITY ent 'entity string'>"; string ent2 = "<!ENTITY ent2 '<foo/><foo/>'>]>"; string dtd = "<!DOCTYPE root[<!ELEMENT root (#PCDATA|foo)*>" + ent1 + ent2; string xml = dtd + "<root>&ent;&ent2;</root>"; document.LoadXml (xml); Assert.AreEqual (xml, document.OuterXml); XmlNodeReader nr = new XmlNodeReader (document); nr.Read (); // DTD nr.Read (); // root nr.Read (); // &ent; Assert.AreEqual (XmlNodeType.EntityReference, nr.NodeType); Assert.AreEqual (1, nr.Depth, "depth#1"); nr.ResolveEntity (); // It is still entity reference. Assert.AreEqual (XmlNodeType.EntityReference, nr.NodeType); nr.Read (); Assert.AreEqual (XmlNodeType.Text, nr.NodeType); Assert.AreEqual (2, nr.Depth, "depth#2"); Assert.AreEqual ("entity string", nr.Value); nr.Read (); Assert.AreEqual (XmlNodeType.EndEntity, nr.NodeType); Assert.AreEqual (1, nr.Depth, "depth#3"); Assert.AreEqual ("", nr.Value); nr.Read (); // &ent2; Assert.AreEqual (XmlNodeType.EntityReference, nr.NodeType); Assert.AreEqual (1, nr.Depth, "depth#4"); nr.ResolveEntity (); Assert.AreEqual (xml, document.OuterXml); // It is still entity reference. Assert.AreEqual (XmlNodeType.EntityReference, nr.NodeType); // It now became element node. nr.Read (); Assert.AreEqual (XmlNodeType.Element, nr.NodeType); Assert.AreEqual (2, nr.Depth, "depth#5"); Assert.AreEqual (xml, document.OuterXml); }
public void ResolveEntity2 () { document.RemoveAll (); string ent1 = "<!ENTITY ent 'entity string'>"; string ent2 = "<!ENTITY ent2 '<foo/><foo/>'>]>"; string dtd = "<!DOCTYPE root[<!ELEMENT root (#PCDATA|foo)*>" + ent1 + ent2; string xml = dtd + "<root>&ent3;&ent2;</root>"; XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null); xtr.Read (); document.AppendChild (document.ReadNode (xtr)); document.AppendChild (document.ReadNode (xtr)); xtr.Close (); Assert.AreEqual (xml, document.OuterXml); XmlNodeReader nr = new XmlNodeReader (document); nr.Read (); // DTD nr.Read (); // root nr.Read (); // &ent3; Assert.AreEqual (XmlNodeType.EntityReference, nr.NodeType); // ent3 does not exist in this dtd. nr.ResolveEntity (); Assert.AreEqual (XmlNodeType.EntityReference, nr.NodeType); nr.Read (); #if false // Hmm... MS.NET returned as it is a Text node. Assert.AreEqual (XmlNodeType.Text, nr.NodeType); Assert.AreEqual (String.Empty, nr.Value); nr.Read (); // Really!? Assert.AreEqual (XmlNodeType.EndEntity, nr.NodeType); Assert.AreEqual (String.Empty, nr.Value); #endif }