使用LinQ解析XML后,List为空

时间:2014-01-24 08:09:05

标签: c# xml linq

我有一个类似于以下内容的xml文件:

<doc>
  <file>
    <header>
      <source>
        RNG
      </source>
    </header>
    <body>
      <item name="items.names.id1">
         <property>propertyvalue1</property>
      </item>
      <!-- etc -->
      <item name="items.names.id100">
         <property>propertyvalue100</property>
      </item>
      <!-- etc -->
      <item name="otheritems.names.id100">
         <property>propertyvalue100</property>
      </item>
    </body>
  </file>
</doc>

以下课程:

private class Item
{
    public string Id;
    public string Property;
}

例如,该文件有100个项目条目(在name属性中标记为1到100)。如何使用Linq Xml来获取这些节点并将它们放在项目列表中?

使用Selman22的例子,我正在做以下事情:

var myList = xDoc.Descendants("item")
                 .Where(x => x.Attributes("name").ToString().StartsWith("items.names.id"))
                 .Select(item => new Item
                 {
                     Id = (string)item.Attribute("name"),
                     Name = (string)item.Element("property")
                 }).ToList();

但是,列表为空。我在这里缺少什么?

5 个答案:

答案 0 :(得分:0)

您可以使用LinqToXml直接查询XML,或者反序列化它并使用LINQ来对象。如果您选择反序列化,我建议从模式开始,并使用xsd.exe生成表示数据模型的类。如果您没有xml的架构,即使 xsd.exe 也可以从示例xml文件中推断出一个,但您可能需要对结果进行微调。

答案 1 :(得分:0)

试试这个XElement root = XElement.Parse("your file name"); var items textSegs =(from item in root.Descendants("item") select item).ToList(); 现在迭代列表并存储它

答案 2 :(得分:0)

使用LINQ to XML:

XDocument xDoc = XDocument.Load(filepath);
var myList = xDoc.Descendants("item").Select(item => new Item {
                                      Id = (string)item.Attribute("name"),
                                      Property = (string)item.Element("property")
                                                              }).ToList();

答案 3 :(得分:0)

以下是使用Xdocument从xml获取信息的方法。

string input = "<Your xml>";

Xdocument doc = XDocument.Parse(input);

var data = doc.Descendants("item");
List<Items> itemsList = new List<Items>();

foreach(var item in data)
{
string itemname= item.Element("item").Value;
string property = item.Element("property").Value;
itemsList.Add(new item(itemname, property));
}

答案 4 :(得分:0)

我猜你想要给出你的问题是如何表达的代码..我也假设真正的XML也非常简单。

var items = from item in doc.Descendants("item")
            select new Item()
            {
             Id = item.Attributes("name").First().Value,
             Property = item.Elements().First().Value,
            };

确保将xml加载到doc中。您可以通过两种方式加载xml:

// By a string with xml
var doc = XDocument.Parse(aStringWithXml);
// or by loading from uri (file)
var doc = XDocuemnt.Load(aStringWhichIsAFile);