我是一名PHP程序员,我正在尝试理解一些我认为是ASP.NET的代码。这也是我第一次涉足XML。我无法访问要测试的Windows框。
我需要生成第三方代码可以使用的XML输出。第三方想要使用我们的数据而不是他们当前使用的数据源。我不想完全复制当前的XML结构 ,因为它不能很好地映射到我们的数据。
当前XML的结构非常 flat 。只有少数嵌套元素,第三方不使用任何嵌套元素。第三方确实有一个分包的程序员,但他很忙。另外,我想了解一下这是如何运作的。
这是自定义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结构的示例摘录:
<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>
那么subsectors
数据会发生什么?读者是否为它创建了一个单独的表格?如果是这样,表格如何相关?
我们的数据包括每家公司的多个联系人。我可以在顶层fname1
,fname2
,fname3
创建多个元素以保持平面结构。但我认为嵌套结构对于这种数据是有意义的。问题是我不明白这种结构变化是否与插件代码兼容。
需要对插件代码进行哪些更改才能使用嵌套元素?
答案 0 :(得分:1)
我自己也对此感到难过,我不知道你是否仍然存在,但是我在这里找到了其他人的参考资料。
你是对的,假设读者为它创建了一个单独的表。由于DataSet可以容纳多个表,因此每个“级别”的元素都有自己的表。但是,任何具有自己嵌套元素的嵌套元素都将获得自己的表。从本质上讲,它一直在创建表,直到它到达xml树的底部。如果元素没有子元素,则它将作为单元格添加到数据表中。
在你的情况下, dataSet.Tables [0]将保存顶级节点(所有&lt; .profiles&gt;)。但是由于嵌套元素&lt; .profile&gt;具有自己的元素,Tables [0]可能只有一行。更深层次的,dataSet.Tables [1]将保存所有&lt; -profile&gt;节点。虽然&lt; .subsectors&gt;有子元素&lt; .subsector&gt;,它不会在表[1]中,而是在表[2]中更深入。
我知道已经有一段时间了,但是希望这会有所帮助。