从linq检索xml数据的问题

时间:2010-10-28 14:41:28

标签: c# xml linq linq-to-xml

我有想要获取一些数据的xml

XDocument loaded = XDocument.Load(@"c:\TERC.xml");


        var query = (from c in loaded.Descendants("catalog")
                 from r in c.Descendants("row")
                 select (string)r.Element("Name"));

这会返回null

的集合

我该如何解决?

这是xml:

<?xml version="1.0" encoding="UTF-8" ?> 
 <teryt>
 <catalog name="Compix">
 <row>
    <col name="NAME">Name1</col> 
    <col name="ID">12</col> 
    </row>
 <row>
    <col name="NAME">Name2</col> 
    <col name="ID">13</col> 
    </row>
 <row>
    <col name="NAME">Name3</col> 
    <col name="ID">14</col> 
    </row>  
</catalog>
</teryt>

3 个答案:

答案 0 :(得分:2)

List<string> query = (from c in loaded.Descendants("catalog")
                      from r in c.Descendants("row")
                      from col in r.Descendants("col").Where(col1 => 
                         col1.Attribute(XName.Get("name")).Value == "NAME")
                      select col.Value).ToList();

执行上述语句后,query包含以下字符串:

  • Name1
  • Name2
  • Name3

答案 1 :(得分:1)

你可能想试试这个:

var query = (from c in loaded.Descendants("catalog")
                     from r in c.Descendants("row")
                     select (string)r.Value);

我假设您想要获取“col”节点内的数据。否则,请准确检查您要检索的内容。

希望这有帮助。

答案 2 :(得分:1)

名称是您想要值的col元素的属性,该部分在查询中缺失。

        var query = (from c in loaded.Descendants("catalog")
                     from r in c.Descendants("row")
                     from col in r.Descendants("col")
                     select (string)r.Value).ToList<string>();