通过readXML阅读子标签

时间:2013-08-21 23:17:34

标签: c# .net xml vb.net

Dataset ds=new DataSet();
ds.ReadXml("path of the xml");

但是ds有多个表,我想分别获取Header和Footer的详细信息标记信息:

XElement xElement = XElement.Parse(ds.GetXml().ToString());
  var items =xElement
                  .Descendants("Header");

上面的代码没有给我结果,它回来是空的。

我如何获得姓名&每个页眉和每个页脚的详细信息标记的数字标记?我可以使用ds.ReadXML separtely创建2个数据集吗?

这是我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<Mapping>
 <Header>
   <Row>
      <Details>
      <Name>Name</Name> 
         <DataType>string</DataType>
         <Value>Mark</Value>
      </Details>
      <Details>
      <Name>Number</Name> 
         <DataType>int</DataType>
         <Value>1</Value>
      </Details>
   </Row>    
 </Header>
<Footer>
   <Row>
      <Details>
      <Name>Name</Name> 
         <DataType>string</DataType>
         <Value>John</Value>
      </Details>
      <Details>
      <Name>Number</Name> 
         <DataType>int</DataType>
         <Value>2</Value>
      </Details>
   </Row>
</Footer>
</Mapping>

数据集1:标题信息 - 这样我就可以循环'行

数据集2:页脚信息 - 这样我就可以循环'行

或者是否有其他方法可以分别取出姓名,号码?这里的目标是获取数据并构建一个C#类,如

public class Header
{
 public Header(){}

 public string Name;
 public int Number

}


public class Footer
{
 public Footer(){}

 public string Name;
 public int Number

}

1 个答案:

答案 0 :(得分:1)

XElement mapping = XElement.Parse(ds.GetXml().ToString());
var query = from d in mapping.Descendants("Details")
            select new {
                Name = (string)d.Element("Name"),
                Number = (int)d.Element("Number")
            };

如果您想构建类实例:

var headers = from d in mapping.Element("Header")
                               .Element("Row").Elements("Details")
              select new Header {
                  Name = (string)d.Element("Name"),
                  Number = (int)d.Element("Number")
              };

获取页脚是相同的,除非您首先选择"Footer"元素。


您也可以使用XPath选择元素:

var headers = from d in mapping.XPathSelectElements("Header/Row/Details")
              select new Header {
                  Name = (string)d.Element("Name"),
                  Number = (int)d.Element("Number")
              };