2012-12-21 41 views
0

我有一個非常大的XML。它有領域,如在php中映射XML字段

<SegrigatedQualification> 
    <EducationSplit> 
     <University><![CDATA[G. H. Raisoni College of Engineering]]></University> 
     <Degree><![CDATA[Engineering]]></Degree> 
     <Year><![CDATA[2011]]></Year> 
    </EducationSplit> 
    <EducationSplit> 
     <University><![CDATA[G. H. Raisoni College of Engineering]]></University> 
     <Degree><![CDATA[Engineering]]></Degree> 
     <Year><![CDATA[2010]]></Year> 
    </EducationSplit> 
    <EducationSplit> 
     <University><![CDATA[G. H. Raisoni College of Engineering]]></University> 
     <Degree><![CDATA[Engineering]]></Degree> 
     <Year><![CDATA[2009]]></Year> 
    </EducationSplit> 
    <EducationSplit> 
     <University><![CDATA[Diploma I.T]]></University> 
     <Degree><![CDATA[Diploma I.T]]></Degree> 
     <Year><![CDATA[2008]]></Year> 
    </EducationSplit> 
    <EducationSplit> 
     <University><![CDATA[Nasik Board]]></University> 
     <Degree><![CDATA[S.S.C]]></Degree> 
     <Year><![CDATA[2003]]></Year> 
    </EducationSplit> 
    </SegrigatedQualification> 

我要地圖領域的並表,然後所有的XML信息存儲到表中。問題是,如果我創建一列SagrigratedQualificaton如何將教育拆分或大學,學位,年份存儲在一行?因爲如果我創建單獨的列大學,學位等信息將採取兩行或更多行這種方式表成爲多餘的。將xml映射到表格的最佳方式是什麼?

+0

您應該讀了[數據庫規範化] (http://en.wikipedia.org/wiki/Database_normalization),然後根據你學到的知識創建一個表結構。 – Charles

+0

我想說,但很多領域都是動態的,所以如果以後如果該領域不存在於表格中,我會添加它。 –

回答

0

關係數據庫...每個xml結構應該是不同表中的不同記錄。 或者只是保持簡單並將其存儲在某些TEXT或BLOB字段中。

+0

嗯,這將是我最後的選擇。 –

+0

然後即興...創建最適合您的表格結構,並在那裏轉儲信息。您可以將父/子節點名稱合併爲更具創造性的字段名稱'educationsplit_university'等...然後編寫遞歸函數將xml轉換爲單維key =>值數組並保存它 – Alex

+0

嗯,我可以試試這個,但第一步是在xml中創建帶有字段的表格,然後使用鍵值進行映射,所有這些都需要花費太多時間,我必須找到一個簡單的解決方案。 –

0

你可以使用類似MagicParser的東西來提取數據,然後將其映射到你自己的表格和字段。

+0

感謝讓我結帳。 –

+0

你可以查看它,看看它是如何解析你的xml在這裏:http://www.magicparser.com/demo?fileID=50D402D0B7893&record=2 – MrTechie

+0

謝謝我試過這個工具。工具很好,但它沒有解析我的所有領域。這個工具我可以用於小型XML。 –

0
<?php 
require("MagicParser.php"); 

function myRecordHandler($record){ 


// This is where you write your code to process each record, such as loading a database 

// The following code will print out each field in your sample data: 
print $record["EDUCATIONSPLIT"]; 
print $record["UNIVERSITY"]; 
print $record["DEGREE"]; 
print $record["YEAR"]; 
} 

$data = ""; // string variable contianing the data to parse 

MagicParser_parse("string://".$data,"myRecordHandler","xml|SEGRIGATEDQUALIFICATION/EDUCATIONSPLIT/"); 
?> 

注意:如果你想從一個實際的文件加載它,那麼只需在刪除$的數據參考和作出這樣的MagicParser_parse:

MagicParser_parse("your-xml-file.xml".$data,"myRecordHandler","xml|SEGRIGATEDQUALIFICATION/EDUCATIONSPLIT/"); 
+0

謝謝亞歷克斯無法得到它:( – MrTechie