从C#中的XML文档中找出默认的名称空间URI

时间:2011-10-20 08:48:15

标签: c# xml

其他一些问题已经询问如何使用Xpath查询具有默认命名空间的XML文档。答案是使用命名空间管理器为默认命名空间创建别名,并在xpath中使用该别名。

但是,如果您事先不知道默认命名空间的URI,该怎么办?你如何从XML文档中找到它?

5 个答案:

答案 0 :(得分:13)

var doc = XDocument.Parse(myXml);
XNamespace ns = doc.Root.GetDefaultNamespace();

答案 1 :(得分:3)

如果您使用的是XmlDocument,则可以通过检查根元素的NamespaceURI来获取默认命名空间:

var document = new XmlDocument();
document.LoadXml("<root xmlns='http://java.sun.com/xml/ns/j2ee'></root>");
var defaultNamespace = document.DocumentElement.NamespaceURI;
Assert.IsTrue(defaultNamespace == "http://java.sun.com/xml/ns/j2ee");

答案 2 :(得分:0)

您可以尝试使用XmlNamespaceManager.DefaultNamespace来获取它。

http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.defaultnamespace.aspx

答案 3 :(得分:0)

我知道这是一个古老的话题,但我遇到了同样的问题,使用XmlDocument类,因为我想知道默认命名空间和带前缀的命名空间。

我可以使用相同的方法获得两个名称空间。

string prefixns = element.GetNamespaceOfPrefix("prefix");
string defaultns = element.GetNamespaceOfPrefix("");

这似乎对我在XmlElement上获取两个名称空间都有用。

编辑:这是一个XmlNode方法,所以也应该在属性

上工作

答案 4 :(得分:0)

最简单的方法

XmlDocument xDoc = new XmlDocument();
xDoc.Load(uriPath);
Console.WriteLine(xDoc.NamespaceURI);