Reputation: 17039
I've browsed the questions with similar titles but cannot seem to find exactly what I'm looking for,if anyone spotted a similar question kindly point me to the thread.Here is my question:
I have an xsd file which starts of like this:
I need to know how to programatically access the namespace value of the above file.
Additionally my solution needs to be generic so I cannot simply search for xmlns:xs
because the exact name of the namespace may have a different name
I've tried the following, but when debugging the value of the elementNamespace
variable is blank ""
:
XElement elemet = XElement.Load(@"D:\xsd\Response.xsd");
string elementNamespace = elemet.GetDefaultNamespace().NamespaceName;
System.Diagnostics.Debug.WriteLine("Namespace " + elementNamespace);
Upvotes: 13
Views: 27268
Reputation: 13506
Here's what I ended up using from the Scott Hanselman article
public static IDictionary<string, string> GetXmlNamespaces(string sourcePath)
{
XDocument y = XDocument.Load(sourcePath);
XPathNavigator foo = y.CreateNavigator();
foo.MoveToFollowing(XPathNodeType.Element);
return foo.GetNamespacesInScope(XmlNamespaceScope.All);
}
Usually the namespace I want is in the value of the 2nd element of the dictionary which I access like so:
var namespace = GetXmlNamespaces("myfile.xml").ElementAt(1).Value;
Upvotes: 1
Reputation: 86749
Thats because the default namespace is blank / not specified. I'd guess that you want GetNamespaceOfPrefix
:
string elementNamespace = elemet.GetNamespaceOfPrefix("xs").NamespaceName;
Although that doesn't make a whole lot of sense to be honest - I'm not really sure what you are after.
Upvotes: 6
Reputation: 6578
Scott Hanselman has an article on how to get the namespaces:
http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx
Upvotes: 17