使用linq读取xml数据的简单方法

时间:2014-02-06 06:36:37

标签: c# xml linq

我有像这样的xml结构。任何人都可以帮助使用简单的linq函数来读取此xml结构.itendEntry节点根据数据重复。我尝试使用下面的方法读取xml,但我在列表中没有记录。这种方法在这里是正确的方式来获取细节...

List<CX_ITEMLIST> sList =
    (from e in XDocument.Load(param.FileName).Root.Elements("itemEntry")
     select new CX_ITEMLIST
     {
         TITLE = (string)e.Element("title"),
         YEAR = (string)e.Element("year"),
         ITEMNAME = (string)e.Element("itemname"),
         CATRYLIST =
         (
             from p in e.Elements("categorylist").Elements("categories")
             select new CATLIST
             {
                 IDTYPE = (string)p.Element("categoryid"),
                 IDNUMBER = (string)p.Element("categoryName")
             }).ToList()
     }).ToList();
<itemslist>
 <itemInformation>
  <itemdate>01/23/2014</itemdate>
  <itemcount>57</itemcount>
 </itemInformation>
 <itemEntry>
  <title>Title1</title>
  <year>2013</title>
  <itemname>testname</itemname>
  <categorylist>
  <categories>
   <categoryid>Category1</categoryid>
   <categoryName>Category2</categoryName>
  </categories>
  <categories>
   <categoryid>Category1</categoryid>
   <categoryName>Category2</categoryName>
  </categories>
  </categorylist>
 </itemEntry>
 <itemEntry>
  <title>Title1</title>
  <year>2013</title>
  <itemname>testname</itemname>
  <categorylist>
  <categories>
   <categoryid>Category1</categoryid>
   <categoryName>Category2</categoryName>
  </categories>
  <categories>
   <categoryid>Category1</categoryid>
   <categoryName>Category2</categoryName>
  </categories>
  </categorylist>
 </itemEntry>
</itemslist>

3 个答案:

答案 0 :(得分:1)

您应该尝试使用XDocument

XDocument xdoc = XDocument.Load("file.xml");

答案 1 :(得分:0)

System.Xml.XLinq命名空间包含一些很棒的对象,可以轻松实现。

var xDoc = XDocument.Parse(xml); // load your xml string, or use XDocument.Load() to load an xml file

var itemEntries = xDoc
    .Root                       // refers to itemEntries node
    .Descendants("itemEntry");  // gets all itemEntry nodes in an IEnumerable object 

这会让你获得所有itemEntry节点的IEnumerable<XNode>

从那里你可以做你需要的,将值保存到业务对象等等。

答案 2 :(得分:0)

上面的方法工作正常,我发现问题,我的xml标签有namespace属性。我试图获取命名空间并在阅读

时将其附加到Elements
XNamespace ns = xDocument.Root.Attribute("xmlns").Value;

List<CX_ITEMLIST> sList =
    (from e in XDocument.Load(param.FileName).Root.Elements(ns + "itemEntry")
     select new CX_ITEMLIST
     {
         TITLE = (string)e.Element(ns + "title"),
         YEAR = (string)e.Element(ns + "year"),
         ITEMNAME = (string)e.Element(ns + "itemname"),
         CATRYLIST =
         (
             from p in e.Elements(ns + "categorylist").Elements(ns + "categories")
             select new CATLIST
             {
                 IDTYPE = (string)p.Element(ns + "categoryid"),
                 IDNUMBER = (string)p.Element(ns + "categoryName")
             }).ToList()
     }).ToList();