XmlNameSpaceManager - Elegant way of determining correct namespace manager for XmlDocument

81 Views Asked by At

I have a large quantity of xml files which correspond to one of three possible namespace tables and I would like to extract data via XmlNode.SelectSingleNode however I would like to know which is the most elegant way of trying to establish which XmlNameSpaceManager to use, via C# code (.NET).

I'm trying to establish the most elegant way of finding the correct, corresponding NameSpaceManager associated to an XmlDocument instance.

XmlNode x = xmlDoc.SelectSingleNode("/root/Person/Name", namespaceManager);

namespaceManager could be associated to any of these:-

private XmlNamespaceManager namespaceManager_v1()
{
    NameTable nt = new NameTable();
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
    nsmgr.AddNamespace("a", "a:v1");
    nsmgr.AddNamespace("b", "b:v1");
    nsmgr.AddNamespace("version", "1.0");
}

or

private XmlNamespaceManager namespaceManager_v2()
    {
    NameTable nt = new NameTable();
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
    nsmgr.AddNamespace("a", "a:v2");
    nsmgr.AddNamespace("b", "b:v2");
    nsmgr.AddNamespace("version", "2.0");
}

or

private XmlNamespaceManager namespaceManager_v3()
    {
    NameTable nt = new NameTable();
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
    nsmgr.AddNamespace("a", "a:v3");
    nsmgr.AddNamespace("b", "b:v3");
    nsmgr.AddNamespace("version", "3.0");
}

Is it a case of iterating through until a result is returned?

if (xmlDoc.SelectSingleNode("/root/Person/Name", namespaceManager_v1) != null)
   {
     //Do something
   }
else
   {
     if (xmlDoc.SelectSingleNode("/root/Person/Name", namespaceManager_v2) != null)
       {
           //Do something
       }
     else
       {
         if (xmlDoc.SelectSingleNode("/root/Person/Name", namespaceManager_v3) != null)
           {
            //Do something
           }
       }
   }

Any advice is greatly appreciated.

Thanks

0

There are 0 best solutions below