xmlnsを使用したXMLファイルを解析するときに、なぜのXElementが倒れていますか?

StackOverflow https://stackoverflow.com/questions/2425674

質問

私は、XMLファイルを解析しようとしているのでます:

 <?xml version="1.0" encoding="utf-8" ?>
<Root>    
  <att1 name="bob" age="unspecified" xmlns="http://foo.co.uk/nan">    
  </att1>    
</Root>

次のコードを使用します:

XElement xDoc= XElement.Load(filename);
var query = from c in xDoc.Descendants("att1").Attributes() select c;
foreach (XAttribute a in query)
{
    Console.WriteLine("{0}, {1}",a.Name,a.Value);
}

私はのxmlnsを削除しない限り何もコンソールに書き込まれません=「http://foo.co.uk/nan」xmlファイルから、予想されるように、私は、属性名と値のリストを取得した後、および私が必要として!

編集:書式設定

役に立ちましたか?

解決

あなたは、あなたのコード内で同じ名前空間を使用する必要があります:

XElement xDoc= XElement.Load(filename);
XNamespace ns = "http://foo.co.uk/nan";
var query = from c in xDoc.Descendants(ns + "att1").Attributes() select c;
foreach (XAttribute a in query)
{
    Console.WriteLine("{0}, {1}",a.Name,a.Value);
}

属性は、デフォルト(xmlns=....)名前空間をピックアップしていないので、あなたはそれらを修飾する必要はありません。名前空間のタグ(xmln:tags=....)は、文書やAPIの使用に純粋にローカルである、名前は本当に名前空間+常にあなたが常に名前空間を指定する必要がありますので、ローカル名です。

scroll top