2017-05-16 10 views
0

私はXDocument使用して、このXMLドキュメント内のメタデータから名前空間を取得しようとしている:私はそうのようにXElementオブジェクトからGetDefaultNamespace()メソッドを使用しようとしたLINQは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> 

を:

XNamespace ns = xmlDoc.Root.GetDefaultNamespace(); 

しかし、私はNULL値を取得します。私は、ルート名前空間に複数の名前空間があるため、このメソッドを使用してメタデータの名前空間を取得できない可能性があるというコメントを読んでいます。

私はRoot.Element( "metadata")から属性を取得しようとしましたが、私は動作しない名前空間を持っていないと思っていました。

アイデア?

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

関連する問題