LINQ to XML GetDefaultNamespace()返回null

时间:2017-05-16 20:44:11

标签: c# xml linq

我试图使用XDocument从这个xml文档中的元数据中获取命名空间:

<?xml version="1.0" encoding="utf=8"?>
<package xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <id>NugetName</id>
    <version>1.0.0</version>
    <authors>company</authors>
    <owners>company</owners>
  </metadata>
  <files>
  ...
  </files>
</package>

我尝试过使用XElement中的GetDefaultNamespace()方法,如下所示:

XNamespace ns = xmlDoc.Root.GetDefaultNamespace();

但是我得到一个空值。我读了一些注释,说因为根命名空间有多个命名空间,所以可能无法使用这种方法获取元数据的命名空间。

我想尝试从Root.Element(&#34;元数据&#34;)中抓取属性,但因为我没有使用我认为无法工作的命名空间。

有什么想法吗?

PS我之所以不知道命名空间的原因是因为我正在使用受信任的nuspec文件,而且我担心架构可能会发生变化。

1 个答案:

答案 0 :(得分:2)

xmlDoc.Root<package>元素 它没有默认命名空间。

您想要xmlDoc.Root.Elements().First().GetDefaultNamespace()