【问题标题】:Reading child tags via readXML通过 readXML 读取子标签
【发布时间】:2013-08-21 23:17:34
【问题描述】:
Dataset ds=new DataSet();
ds.ReadXml("path of the xml");

但是ds有多个表,我想分别取出Header和Footer的details标签信息:

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

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

如何获取每个页眉和每个页脚的详细信息标签的名称和编号标签?我可以单独使用 ds.ReadXML 创建 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

}

【问题讨论】:

    标签: c# .net xml vb.net


    【解决方案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")
                  };
    

    【讨论】:

    • 谢谢,我怎样才能选择新的 Header - 要动态创建的 Header 类,我想用字符串名称和 int Number 创建 Header.cs - XML 文件可以包含任何标签,那些标签需要成为类的一部分?
    • @Sharpeye500 你能澄清一下'xml 可以包含任何标签'是什么意思吗?一些样本可能
    • 我想根据 xml 中的标签创建类的属性名称,例如,我想用标签名称、数字作为公共字符串名称、公共 int 编号等动态创建类头。 . 读取标签并创建类。我想创建运行时类。
    • @Sharpeye500 以及如果您在编译时不知道属性,您将如何使用它们?
    • lazyberezovsky - 这是一个很好的问题,我错过了在 xml 中包含数据类型。我已经编辑了我的问题,请分享您的宝贵想法。
    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多