我用类似的标题浏览了这些问题,但似乎无法找到我正在寻找的内容,如果有人发现类似的问题,请指点我的话。这是我的问题:
我有一个xsd文件,它的开头是这样的:
我需要知道如何以编程方式访问上述文件的命名空间值。
此外,我的解决方案需要是通用的,所以我不能简单地搜索xmlns:xs
,因为命名空间的确切名称可能有不同的名称
我尝试过以下操作,但调试时elementNamespace
变量的值为空""
:
XElement elemet = XElement.Load(@"D:\xsd\Response.xsd");
string elementNamespace = elemet.GetDefaultNamespace().NamespaceName;
System.Diagnostics.Debug.WriteLine("Namespace " + elementNamespace);
答案 0 :(得分:14)
Scott Hanselman有一篇关于如何获取命名空间的文章:
http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx
答案 1 :(得分:6)
这是因为默认命名空间是空白/未指定。我想猜测你想要GetNamespaceOfPrefix
:
string elementNamespace = elemet.GetNamespaceOfPrefix("xs").NamespaceName;
虽然说实话并没有多大意义 - 但我不确定你的目标是什么。
答案 2 :(得分:1)
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;