从xml文件中获取命名空间C#

时间:2011-11-23 12:02:31

标签: c# xml

我用类似的标题浏览了这些问题,但似乎无法找到我正在寻找的内容,如果有人发现类似的问题,请指点我的话。这是我的问题:

我有一个xsd文件,它的开头是这样的:

Beginning of my xsd file 我需要知道如何以编程方式访问上述文件的命名空间值。

此外,我的解决方案需要是通用的,所以我不能简单地搜索xmlns:xs,因为命名空间的确切名称可能有不同的名称

我尝试过以下操作,但调试时elementNamespace变量的值为空""

XElement elemet = XElement.Load(@"D:\xsd\Response.xsd");
string elementNamespace = elemet.GetDefaultNamespace().NamespaceName;
System.Diagnostics.Debug.WriteLine("Namespace " + elementNamespace);

3 个答案:

答案 0 :(得分:14)

Scott Hanselman有一篇关于如何获取命名空间的文章:

http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx

答案 1 :(得分:6)

这是因为默认命名空间是空白/未指定。我想猜测你想要GetNamespaceOfPrefix

string elementNamespace = elemet.GetNamespaceOfPrefix("xs").NamespaceName;

虽然说实话并没有多大意义 - 但我不确定你的目标是什么。

答案 2 :(得分:1)

这就是我在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);
}

通常,我想要的名称空间位于我访问的字典的第二个元素的值中,

var namespace = GetXmlNamespaces("myfile.xml").ElementAt(1).Value;