2

良い一日、

ToDicationary() 拡張メソッドで遊んでいます

var document = XDocument.Load(@"..\..\Info.xml");
XNamespace ns = "http://www.someurl.org/schemas";

var myData = document.Descendants(ns + "AlbumDetails").ToDictionary
    (
        e => e.Name.LocalName.ToString(),
        e => e.Value
    );

Console.WriteLine("Writing music...");
foreach (KeyValuePair<string, string> kvp in myData)
{
    Console.WriteLine("{0} = {1}", kvp.Key, kvp.Value);
}

次の XML データを使用します。

<?xml version="1.0" encoding="UTF-8"?>
<Database xmlns="http://www.someurl.org/schemas">
    <Info>
        <AlbumDetails>
            <Artist>Ottmar Liebert</Artist>
            <Song>Barcelona Nights</Song>
            <Origin>Spain</Origin>
        </AlbumDetails>
    </Info>
</Database>

必要な出力が得られません。代わりに私はこれを得ています:

Writing music...
AlbumDetails = Ottmar LiebertBarcelona NightsSpain

代わりに、myData("Artist") = "Ottmar Liebert" などが必要です...

ディセンダントでできることはありますか?

ティア、

コソン

4

2 に答える 2

2

以下は単純にAlbumDetailsノードを取得します。

document.Descendants(ns + "AlbumDetails")

その直接の子孫 (子ノード)が必要です。これらも要素であるためです。

document.Descendants(ns + "AlbumDetails").Elements()

完全な行は次のようになります。

var myData = document.Descendants(ns + "AlbumDetails")
             .Elements().ToDictionary(
                                      e => e.Name.LocalName.ToString(),
                                      e => e.Value
                                     );
于 2012-08-16T19:48:21.200 に答える
1

これを試して。

string s = "<data><resource key=\"123\">foo</resource><resource key=\"456\">bar</resource><resource key=\"789\">bar</resource></data>"; 
XmlDocument xml = new XmlDocument(); 
xml.LoadXml(s); 
XmlNodeList resources = xml.SelectNodes("data/resource"); 
SortedDictionary<string,string> dictionary = new SortedDictionary<string,string>(); 
foreach (XmlNode node in resources){ 
    dictionary.Add(node.Attributes["key"].Value, node.InnerText); 
} 
于 2012-08-16T19:50:29.673 に答える