【问题标题】:Customizing the xml serialization of a DataSet自定义 DataSet 的 xml 序列化
【发布时间】:2015-01-31 17:35:20
【问题描述】:

我有一个包含以下信息的数据表。

我想把这个数据表写入xml,所以我使用了WriteXml方法,生成了下面的xml

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <Person>
    <Name>Person1</Name>
    <Contact>Fred Nurk</Contact>
    <CourseName>Course 1</CourseName>
    <CourseTime>09:00</CourseTime>
  </Person>
  <Person>
    <Name>Person1</Name>
    <Contact>Fred Nurk</Contact>
    <CourseName>Course 2</CourseName>
    <CourseTime>10:00</CourseTime>
  </Person>
</DocumentElement>

我想把 xml 合并同一个人的课程,这样 xml 就会像下面这样

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <Person>
    <name>Person1</name>
    <contact>Fred Nurk</contact>
      <Courses>
        <Course>
          <courseName>Course 1</courseName>
          <courseTime>09:00</courseTime>
        </Course>
        <Course>
          <courseName>Course 2</courseName>
          <courseTime>10:00</courseTime>
        </Course>
      </Courses>    
  </Person>
</DocumentElement>

任何帮助将不胜感激。

【问题讨论】:

  • 为什么我得了-1,请解释一下?

标签: c# .net xml datatable schema


【解决方案1】:

我认为您必须将数据复制到包含列的临时表中

<name> <contact> <coursename1> <coursetime1> <coursename2> <coursetime2> <coursenameX> <coursetimeX> <coursenameX> <coursetimeX> <..and so on>

并将其写入 XML

【讨论】:

    【解决方案2】:

    我认为在您的情况下,您应该实现 IXmlSerializable 并根据需要制作 xml

    实现方法

    public XmlSchema GetSchema()
    {
        return null; //this should remain equal
    }
    
    public void ReadXml(XmlReader reader)
    {
       throw new NotImplementedException();
    }
    
    public void WriteXml(XmlWriter writer)
    {
        //group your list of Person as you want then
        foreach (Person person in list)
        {
            writer.WriteStartElement("Persons");
            person.WriteXml(writer);
            writer.WriteEndElement();
        }
    }
    

    WriteXml 函数中,您可以检查每个元素是否已在 xml 中(仅添加课程)或不在(添加整个节点)

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多