【问题标题】:Convert Xml with a lot of levels to one DataTable将多层次的Xml转换为一个DataTable
【发布时间】:2016-09-06 18:03:33
【问题描述】:

如何在一个 DataTable 中转换具有多个级别和参数的 XML? 我需要一些东西,比如用 xml 导入做 Excel:

<?xml version='1.0' encoding='UTF-8'?>
<Document>
    <tag1 param1="param">
      <tag2 param2="param">
        <tag3 param3="param">
          <tag4_1 param41="param">VALUE1</tag4_1>
          <tag4_2 param42="param">VALUE2</tag4_2>
        </tag3>
      </tag2>
    </tag1>
    <tag1 param1="param">
      <tag2 param2="param">
        <tag3 param3="param">
          <tag4_1 param41="param">VALUE1</tag4_1>
          <tag4_2 param42="param">VALUE2</tag4_2>
        </tag3>
      </tag2>
    </tag1>
</Document>

Excel 示例:

有简单的方法吗?

这个解决方案 - 这不是我想要的,因为这里会有很多表:

var dataSet = new DataSet();
dataSet.ReadXml(xml, XmlReadMode.InferSchema);

【问题讨论】:

    标签: c# xml winforms datatable


    【解决方案1】:

    如果你知道 xml 的架构,你可以做一个数据类,它会匹配架构并简单地使用 XmlSerializer,然后将 Data 对象传递到数据表中。

    使用普通的 XMLDocument 函数加载 xml 并将其转换为字符串

    将xml转换成字符串

     var t = new System.Xml.XmlDocument();  
     t.Load("PATH");
     t.OuterXml
    

    将 XML 转换为数据对象

       public static object ObjectFromXMLString(Type typeOfObject, string xmlFile)
        {
            XmlSerializer serializer = new XmlSerializer(typeOfObject);
            StringReader rdr = new StringReader(xmlFile);
            return serializer.Deserialize(rdr);
        }
    

    【讨论】:

    • 我知道如何用这个 xml 创建对象。我有架构和课程。我想在表格中显示这个 XML。仅用于可视化,显示信息文件有。从类中我也无法生成简单表的问题......它可以是具有大列名的表,以显示所有数据,例如:“tag1_tag2_tag_3_tag4_1”或“tag1_tag2_tag_3_tag4_1_param41”
    • 我假设您知道字段的名称和外观。使用所需的列名创建表。然后将xml放入类对象然后Manipulate,哪个元素进入哪个列并逐行创建
    • 你们提供手动创建表吗?哇。我的类/方案有大约 500 个元素/字段,xml 可能只有 500 的 50-60 个不同字段。我的问题是“创建数据表有多简单?”。答:白100500行代码是不对的:)如果没有任何简单的方法可以做到,那么我需要用循环创建方法来读取每个xml元素。检查列是否存在 - 并将数据添加到表中,如果列不存在 - 添加新列 - 为每个元素。
    • 那不会是高效且糟糕的编码!最简单的方法可能是创建一个方法,该方法将遍历节点,找到正在使用的内容并添加它们等。对不起,我真的没有任何帮助。
    • 另一个问题 - 在 WinApp 中显示 xml 的更好方法?我试试 - stackoverflow.com/questions/6582836/… 很慢,读我的 xml 大约半小时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多