【发布时间】: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 中有一个月的年份。如果它不太可能改变,我想我正在做额外的工作,收获甚微。试图证明未来,但也许我太过分了。
-
否;您正在积极尝试破坏名称空间的目的。不要那样做。日期是创建格式的日期。