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