2

Local XMLを解析する前にデータを表示したいのですがやり方がわからない?これを使ってやってみました

XDocument loadedData = XDocument.Load("People.xml");
var data = from query in loadedData.Descendants("array")
       select new Person {
         Name = (string)query.Element("string"),
       };
listBox1.ItemsSource = data;

しかし、それは私に1つの要素しか示していません。

XML は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<dict>
    <key>Categories</key>
    <array>
        <string>Playing baseball</string>
        <string>Driving a car</string>
        <string>Getting dressed</string>
        <string>Eating a hamburger</string>
        <string>Tying shoelace</string>
    </array>
</dict>

すべての文字列要素を解析したい。

4

2 に答える 2

2

メソッドは 1 つの要素(Element(System.Xml.Linq.XName)指定された名前を持つ最初の子要素) のみを返します。Elements(System.Xml.Linq.XName)代わりに、指定された名前を持つすべての要素のコレクションを返すオーバーロードを使用してください。

このコードを試してください:

XDocument loadedData = XDocument.Load("People.xml");

// Get all the <string /> elements from all th
var data = 
    from query in loadedData.Descendants("array") 
    from stringElem in query.Elements("string")
    select new Person { Name = (string)stringElem.Value };

listBox1.ItemsSource = data;
于 2013-05-20T17:39:31.190 に答える
2

これはうまくいくはずです。要素内の要素を反復したいarrayので、 を呼び出しますDescendants("array").Elements()。プロパティはquery.Value文字列として返されるため、文字列にキャストする必要はありません。value

XDocument loadedData = XDocument.Load("People.xml");
var data = (from query in loadedData.Descendants("array").Elements() 
            select new Person
            {
                 Name = query.Value,
            }).ToList();
listBox1.ItemsSource = data;
于 2013-05-20T17:45:08.877 に答える