Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当元素具有相同名称时,数据集将丢失深层结构_C#_Xml_Dataset_Xmlreader - Fatal编程技术网

C# 当元素具有相同名称时,数据集将丢失深层结构

C# 当元素具有相同名称时,数据集将丢失深层结构,c#,xml,dataset,xmlreader,C#,Xml,Dataset,Xmlreader,我有一个包含多个层次的Xml文件,例如: <?xml version="1.0" encoding="utf-8"?> <TestSet> <Test> <Test> <Step/> <Test> <Test> <Step/> </Test> </Test> </TestSet> 我正在使用XmlRe

我有一个包含多个层次的Xml文件,例如:

<?xml version="1.0" encoding="utf-8"?>
<TestSet>
  <Test>
    <Test>
      <Step/>
    <Test>
    <Test>
      <Step/>
    </Test>
  </Test>
</TestSet>
我正在使用XmlReader解析文件,如下所示:

XmlReader xmlFile;
xmlFile = XmlReader.Create(file, new XmlReaderSettings());
DataSet data = new DataSet();
data.ReadXml(xmlFile);
相反,当我使用XmlReader时,我得到:

DataSet.Table[0].Rows.Count == 3   // All of the Test items, High and Low level
DataSet.Table[1].Rows.Count == 2   // Step
两个问题,为什么它跳过我的测试集级别,为什么它将我的测试项合并到一个表中,尽管它们是不同级别的


我是否应该使用另一个阅读器来维护数据的完整性,或者是否为XmlReader提供了解决这些问题的特定设置,还是我自己读入并解析文件更好?

您是否查看了表中的列及其名称?
DataSet
是关系表结构的内存表示形式。它无法处理深度嵌套的XML。请使用LINQ to XML并将XML作为XML进行处理。是的,除了被忽略的测试集之外,所有数据都存在。这两个表是“Test”和“Step”,还创建了一个关系“Test_Step”。XmlReader将Test_Id列添加到这两个表中,并将Test_Id_0列添加到测试表中。Test_Id是主键,Test_Id_0表示两个低级别测试的父测试。。。嵌入深度是以它自己的方式存在的,而不是我期望/希望它的显示方式。您可以更改生成XML的代码吗?只需要一条指令就可以消除两层测试标记。大多数盗版使用将有4或5个级别的嵌入式测试,因此XML不能更改。
DataSet.Table[0].Rows.Count == 3   // All of the Test items, High and Low level
DataSet.Table[1].Rows.Count == 2   // Step