C# DataSet.ReadXml(TextReader)如何处理嵌套的XML元素?

C# DataSet.ReadXml(TextReader)如何处理嵌套的XML元素?,c#,asp.net,xml,xml-parsing,C#,Asp.net,Xml,Xml Parsing,我是一名PHP程序员,我试图理解一些我认为是ASP.NET的代码。这也是我第一次涉足XML。我没有访问Windows box进行测试的权限 我需要生成第三方代码可以使用的XML输出。第三方希望使用我们的数据,而不是他们当前使用的数据源。我不想完全复制当前的XML结构,因为它不能很好地映射到我们的数据 当前XML的结构非常扁平。只有几个嵌套元素,第三方不使用其中任何一个。第三方确实有一个分包的程序员,但他很忙。此外,我想亲自了解这是如何运作的 这是自定义CMS插件的摘录: Dim obj_set

我是一名PHP程序员,我试图理解一些我认为是ASP.NET的代码。这也是我第一次涉足XML。我没有访问Windows box进行测试的权限

我需要生成第三方代码可以使用的XML输出。第三方希望使用我们的数据,而不是他们当前使用的数据源。我不想完全复制当前的XML结构,因为它不能很好地映射到我们的数据

当前XML的结构非常扁平。只有几个嵌套元素,第三方不使用其中任何一个。第三方确实有一个分包的程序员,但他很忙。此外,我想亲自了解这是如何运作的

这是自定义CMS插件的摘录:

Dim obj_set As New Data.DataSet()
Using obj_reader As New System.Xml.XmlTextReader("http://www.example.com/xml_output.php")
  obj_set.ReadXml(obj_reader)
End Using
Dim obj_view As Data.DataView = obj_set.Tables("profile").DefaultView
obj_view.Sort = "cname"
Dim obj_data As Data.DataTable = obj_view.ToTable()
从我目前收集的信息来看,这段代码

  • 将XML文件读入数据集中
  • 按cname对配置文件表进行排序
  • 从排序视图创建新的DataTable
还有其他代码将新表存储到缓存,并从缓存中检索它。然后是循环表行并将列名映射到模板变量的代码

当前XML结构的示例摘录:

<profiles>
  <profile>
    <cname>ABC Corporation</cname>
    <fname>John</fname>
    <lname>Smith</lname>
    <sector>Widgets</sector>
    <subsectors>
      <subsector>Basic Widgets</subsector>
      <subsector>Fancy Widgets</subsector>
    </subsectors>
  </profile>
</profiles>

ABC公司
约翰
史密斯
小部件
基本部件
天气时钟
那么
子部门
数据会发生什么变化?读者是否为其创建单独的表?如果是,这些表格之间的关系如何

我们的数据包括每家公司的多个联系人。我可以在顶层创建多个元素
fname1
fname2
fname3
,以保持平面结构。但是我认为嵌套结构对于这种数据是有意义的。问题是,我不明白这样的结构变化是否与插件代码兼容


为了使用嵌套元素,插件代码需要做哪些更改?

我自己也被难倒了,我不知道你是否仍然是,但以下是我的发现,以供参考

您正确地假设读者为它创建了一个单独的表。由于一个数据集可以容纳多个表,所以每个“级别”的元素都有自己的表。但是,任何具有自己的嵌套元素的嵌套元素都将获得自己的表。本质上,它一直在创建表,直到到达xml树的底部。如果一个元素没有子元素,它将作为一个单元格添加到数据表中

就你而言, dataSet.Tables[0]将保存顶级节点(所有节点)。但由于嵌套元素有自己的元素,表[0]可能只有一行。下一个更深层次的dataSet.Tables[1]将容纳所有节点。虽然因为有子元素,它将不在表[1]中,而是在更深层次的表[2]中

我知道这已经有一段时间没有被问到了,但希望这会有帮助