【问题标题】:LINQ to XML GetDefaultNamespace() returns nullLINQ to XML GetDefaultNamespace() 返回 null
【发布时间】:2017-05-17 05:00:20
【问题描述】:

我正在尝试使用 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();

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

我想尝试从 Root.Element("metadata") 中获取属性,但因为我没有我认为不起作用的命名空间。

有什么想法吗?

PS 我不一定知道命名空间的原因是因为我正在使用受信任的 nuspec 文件并且我担心架构可能会改变。

【问题讨论】:

  • 如何获取xmlDoc?
  • 你不应该担心它可能会改变;命名空间的重点是成为一个 stable 标识符。只有当格式改变时它才会改变(在这种情况下你的代码会中断)。
  • XDocument xmlDoc = XDocument.Load(xml);文件指针 xml 是上述 xml 的副本。
  • @SLaks 我的担忧源于 uri 在 uri 中有一个月的年份。如果它不太可能改变,我想我正在做额外的工作,收获甚微。试图证明未来,但也许我太过分了。
  • 否;您正在积极尝试破坏名称空间的目的。不要那样做。日期是创建格式的日期。

标签: c# xml linq


【解决方案1】:

xmlDoc.Root&lt;package&gt; 元素。
它没有默认命名空间。

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

【讨论】:

  • 这是使用 System.Xml.Linq 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
相关资源
最近更新 更多