解析XML的复杂结构

时间:2013-05-20 16:57:38

标签: windows-phone-8

我想在解析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;

但它只显示了一个元素。

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>

我想解析所有字符串元素。

2 个答案:

答案 0 :(得分:2)

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;

答案 1 :(得分: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;