N M
asked on
C# auto-add all namespaces found in XmlNamespaceManager
I have the following tiny C# console app which reads an XML and searches a value of a tag using a single XPATH. i don't want to change the way it is implemented (via navigator) but I need a small function to add the namespaces; otherwise i can't use it in many different XML documents. May you help me?
Below what I have (working):
Below what I have (working):
using System;
using System.Xml;
using System.Xml.XPath;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
XPathNavigator nav;
XPathDocument docNav;
XmlNamespaceManager nsMgr;
// Openning MYXML doc
docNav = new XPathDocument(@"c:\Users\Somebody\Desktop\xml\MYLASTXML.123456.MYXML.xml");
// Creating a navigator to query using XPath.
nav = docNav.CreateNavigator();
//Add Namespaces for scb and conf
nsMgr = new XmlNamespaceManager(nav.NameTable);
nsMgr.AddNamespace("abc", "http://www.ababab.com/MYXML-1");
nsMgr.AddNamespace("conf", "http://www.fpml.org/FpML-5/confirmation");
.... //I should continue add namespaces here but I need a function to populate with all namespaces found in the XML document..... can you help?
nav = docNav.CreateNavigator().SelectSingleNode("/abc:MYXML/blahblahblah/conf:productId[@productIdScheme='http://www.fpml.org/coding-scheme/external/instrument-id']/text()", nsMgr);
Console.WriteLine(nav);
Console.ReadLine();
}
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Sure. I am on the move so it might take couple of hours. If you can post the challenge you are facing I might be able to help.
ASKER
I tried to include this
nav.MoveToFollowing(XPathN odeType.El ement);
IDictionary<string, string> namespaces = nav.GetNamespacesInScope(X mlNamespac eScope.All );
immediately after
nav = docNav.CreateNavigator();
but I couldn't compile. At the same time, I was trying to create a function for parsing all namespaces but the "nav" component cannot be called from this function.
nav.MoveToFollowing(XPathN
IDictionary<string, string> namespaces = nav.GetNamespacesInScope(X
immediately after
nav = docNav.CreateNavigator();
but I couldn't compile. At the same time, I was trying to create a function for parsing all namespaces but the "nav" component cannot be called from this function.
Hi N M,
I used the same code as I have posted and it worked. Please post the entire snippet so we can figure out why it is giving you an error.
Regards,
Chinmay.
I used the same code as I have posted and it worked. Please post the entire snippet so we can figure out why it is giving you an error.
Regards,
Chinmay.
ASKER