Undeclared Namespace in XML (eg: xsi is an undeclared namespace)
If you XML source publishes invalid XML for some reason ( i.e. it has Xml elements referring to undeclared namespace ) and you try to load this XML in XMLDocument. You would end up getting exception similar to <NameSpace> is an undeclared namespace.
eg:
<?xml version="1.0" encoding="utf-16"?>
<root> <Name xsi:nil="true">name1</Name> <Name xsi:nil="true">name2</Name> <Name xsi:nil="true">name3</Name> </root>
Ideally this is an Invalid XML but there is a way to load it in XMLDocument using following code snippet.
XmlDocument doc = new XmlDocument();
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
nsmgr.AddNamespace("xsi", "https://www.w3.org/2001/XMLSchema-instance");
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
XmlReaderSettings xset = new XmlReaderSettings();
xset.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader rd = XmlReader.Create(new StringReader(XMLSource), xset, context);
doc.Load(rd);
Runeet Vashisht
Comments
Anonymous
October 17, 2012
This is awesome, exactly what I need. I knew I had to somehow inject a declaration into the nametable, but it wasn't obvious how to do that when I was trying to use the LoadXml() method. Thakyou very much!Anonymous
October 28, 2014
Thank you for a quick fix to and obvious issue