2014-03-28 34 views
1

我是一名PHP程序員,我試圖瞭解一些我認爲是ASP.NET的代碼。這也是我第一次進入XML。我無法訪問Windows盒子進行測試。DataSet.ReadXml(TextReader)如何處理嵌套的XML元素?

我需要生成第三方代碼可以使用的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文件到DataSet
  • 按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> 

那麼會發生什麼變化subsectors數據?讀者是否爲它創建了一個單獨的表格?如果是這樣,表格如何相關?

我們的數據包括每個公司多個聯繫人。我可以在頂層創建多個元素fname1,fname2,fname3以保持平面結構。但我認爲嵌套結構對於這類數據是有意義的。問題是我不明白這樣的結構變化是否與插件代碼兼容。

需要對使用嵌套元素的插件代碼進行哪些更改?

回答

1

我自己被困在這件事上,我不知道你是否仍然是,但是爲了引用其他人,這裏是我發現的。

你是對的,假設讀者爲它創建一個單獨的表。由於DataSet可以容納多個表,因此每個「級別」的元素都有自己的表。但是,任何嵌套元素都有自己的表格。從本質上講,它始終創建表,直到它到達xml樹的底部。如果一個元素沒有子元素,它將作爲一個單元格添加到數據表中。

在你的情況下, dataSet.Tables [0]將包含頂級節點(所有的< .profiles>)。但由於嵌套元素<.profile>具有自己的元素,因此表[0]可能只有一行。更深一層,dataSet.Tables [1]將包含所有< -profile>節點。雖然< .subsectors>具有子元素< .subsector>,但它不在表[1]中,而在表[2]中更深層次。

我知道這已經有一段時間了,因爲這被問到了,但希望這會有所幫助。