我这里有一个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>
我正试图获得“id”的值。我目前正在使用XDocument,我尝试了几种不同的方法来解决这个问题。
我确信我可以使用以下内容:
XDocument xmlDoc = XDocument.Load(file);
XNamespace xns = "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd";
XElement el = xmlDoc.Element(xns + "metadata");
XElement id = el.Element(xns + "id");
string idValue = id.Value;
Console.WriteLine(idValue);
但是,我得到错误:对象引用未设置为对象的实例。 我不确定Element如何为null。我是否还需要声明项目命名空间?我试过了,我仍然得到对象引用错误。有人能指出我所犯的新手错误吗?
答案 0 :(得分:1)
由于您的根元素也具有命名空间,因此您可以使用命名空间选择根元素,并使用该引用可以引用元数据元素。最简单的修复方法是替换以下行
XElement el = xmlDoc.Element(xns + "metadata");
与
XElement el = xmlDoc.Root.Element(xns + "metadata");