2017-05-16 141 views
0

我試圖使用的XDocument從這個XML文檔中的元數據獲取的命名空間:的LINQ to XML GetDefaultNamespace()返回null

<?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> 

我試圖使用GetDefaultNamespace()方法的XElement像這樣:

XNamespace ns = xmlDoc.Root.GetDefaultNamespace(); 

但是我得到一個空值。我讀了一些評論說,因爲根名稱空間有多個名稱空間,所以可能無法使用此方法獲取元數據的名稱空間。

我以爲只嘗試抓取來自Root.Element(「元數據」)的屬性,但因爲我沒有命名空間,我認爲不起作用。

任何想法?

PS我不一定知道命名空間的原因是因爲我使用可信的nuspec文件,而且我擔心模式可能會改變。

+0

如何獲得xmlDoc? –

+1

你不應該擔心它可能會改變;命名空間的要點是_stable_標識符。它只會改變格式的變化(在這種情況下你的代碼會中斷)。 – SLaks

+0

XDocument xmlDoc = XDocument.Load(xml);文件指針xml是上述xml的副本。 – JPAnderson

回答

2

xmlDoc.Root<package>元件。
它沒有默認名稱空間。

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

+0

這與使用System.Xml.Linq? – JPAnderson