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