xml資料庫
1. 怎樣將XML文件導入資料庫
要用php 把XML數據導入mysql ,xml里所有的數據導入資料庫
我在php手冊里找了個例子
to import xml into mysql
$file = "article_2_3032005467.xml";
$feed = array();
$key = "";
$info = "";
function startElement($xml_parser, $attrs ) {
global $feed;
}
function endElement($xml_parser, $name) {
global $feed, $info;
$key = $name;
$feed[$key] = $info;
$info = ""; }
function charData($xml_parser, $data ) {
global $info;
$info .= $data; }
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "charData" );
$fp = fopen($file, "r");
while ($data = fread($fp, 8192))
!xml_parse($xml_parser, $data, feof($fp));
xml_parser_free($xml_parser);
$sql= "INSERT INTO `article` ( `";
$j=0;
$i=count($feed);
foreach( $feed as $assoc_index => $value )
{
$j++;
$sql.= strtolower($assoc_index);
if($i>$j) $sql.= "` , `";
if($i <=$j) {$sql.= "` ) VALUES ('";}
}
$h=0;
foreach( $feed as $assoc_index => $value )
{
$h++;
$sql.= utf8_decode(trim(addslashes($value)));
if($i-1>$h) $sql.= "', '";
if($i <=$h) $sql.= "','')";
}
$sql=trim($sql);
echo $sql;
2. 有XML資料庫么
XML與Access,Oracle和SQL Server等資料庫不同,資料庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,XML僅僅是展示數據。事實上XML與其他數據表現形式最大的不同是:他極其簡單。這是一個看上去有點瑣細的優點,但正是這點使XML與眾不同。 XML與HTML的設計區別是:XML是用來存儲數據的,重在數據本身。而HTML是用來定義數據的,重在數據的顯示模式。 XML的簡單使其易於在任何應用程序中讀寫數據,這使XML很快成為數據交換的唯一公共語言,雖然不同的應用軟體也支持其它的數據交換格式,但不久之後他們都將支持XML,那就意味著程序可以更容易的與Windows、Mac OS, Linux以及其他平台下產生的信息結合,然後可以很容易載入XML數據到程序中並分析他,並以XML格式輸出結果。 為了使得SGML顯得用戶友好,XML重新定義了SGML的一些內部值和參數,去掉了大量的很少用到的功能,這些繁雜的功能使得SGML在設計網站時顯得復雜化。XML保留了SGML的結構化功能,這樣就使得網站設計者可以定義自己的文檔類型,XML同時也推出一種新型文檔類型,使得開發者也可以不必定義文檔類型。
3. XML,TXT 可以做為資料庫嗎
可以,但都是入手簡單,其實不簡單。如果對資料庫精通的話,用資料庫比較容易
4. 什麼是xml資料庫
開始討論XML和資料庫之前,我們先回答許多人都遇到過的問題:「XML是資料庫嗎?」
如果僅按資料庫這個術語的本質來看,XML文件就是資料庫,它是數據的集合。在許多方面看起來它和其他文件沒什麼區別 -- 無論如何,每個文件都含有某種類型的數據。作為一種「資料庫」格式,XML有一些優勢:例如,它是自描述的(所用的標記描述了數據的結構和類型,盡管缺乏語義),可交換的(portable)(Unicode),能夠以樹型或圖形結構描述數據。同樣它也有缺點,例如,它顯得有些繁瑣,由於要對它進行解析和文本轉換,所以數據訪問速度較慢。
一個更有用的問題就是在較為寬松的意義上,XML及其周邊技術是否可以算作「資料庫」 -- 資料庫管理系統(DBMS)。答案是「在某種程度上是(sort of)」。從正面來說,XML提供了許多資料庫所具備的東西:存儲(XML文檔), 模式(DTD, XML schema,RElAX NG 等等), 查詢語言(XQuery, XPath, XQL, XML-QL, QUILT等等),編程介面(SAX, DOM,JDOM)等等。從反面來說,它缺少一些作為實用的資料庫所應具備的特性:高效的存儲,索引,安全,事務和數據一致性,多用戶訪問,觸發器,在查詢多個文件等等。
因此,盡管在數據量小、用戶少和性能要求不太高的環境下,可以將XML文檔用作資料庫,但是卻不適用於用戶量大、數據集成度高以及性能要求高的作業環境。
XML適合於用作所謂「資料庫」的一個好例子就是 .ini文件 -- 它包含應用程序的配置信息。與其寫一個處理以逗號分隔(comma-delimited)的文件的解析器,開發一種小型的XML語言並寫一個解釋它的 SAX程序要容易的多。此外,XML允許使用嵌套的實體,而逗號分隔的文件(comma-delimited files)很難做到這點。然而,說它就是資料庫還很勉強,因為它是線性讀寫的,而且僅用在程序開始和結束時。
比較適合於XML資料庫的一些復雜的數據集就是個人通訊錄(名字,電話號碼,地址等),或用於描述瀏覽器書簽以及用Napster偷來的MP3。然而,由於dBase和Access之類的資料庫物美價廉,即使在這種情況下似乎也沒有多少理由把XML文件作為資料庫使用。XML的唯一真正好處就是數據的可交換性(portable),由於有越來越多的工具可以用來對資料庫進行XML序列化(serializing),這一點好處似乎也要打些折扣。
5. 關系資料庫中如何存儲xml數據
XML文檔的一個普通存在的問題是如何持久保存(Persist) XML文檔。在一個關系資料庫中存儲XML文檔是一個非常常用的方法,因為當前關系資料庫的使用非常廣泛。
將XML文檔插入到資料庫中不是簡單的方法,這其中需要很多其它額外的考慮。現在我提供了一些技巧,你可以使用這些技巧在關系資料庫中存儲XML文檔。
1、文檔表:
一個最簡單和容易的方法是,在一個具有單一文本域的資料庫中建立一個表,由此你可以在表中存儲XML數據。由於這些特定資料庫和特定XML文檔,這一文本域可以是一個二進制大型對象(BLOB,binary large object)。有些資料庫需要存儲的是大量的BLOB數據而不是文本。
這一方法的優點是,將數據存入表中變得相當簡單,而且重新獲得也同樣很容易。這種文檔表的管理也很方便。
這種方法的缺點在於你將可能無法進行一些有用的文本搜索,並且在放置特定文檔時也會碰到困難,因為沒有任何方法來識別表中的文檔;
2、主鍵表:
下一個比較復雜的方法是使用一個主鍵表(keyed table)。這種方法與文檔表非常相似,但此時你的表中包含兩個域:一個唯一的主鍵和XML文檔。使用這種方法,你既可以具有存儲和獲得整個XML文檔的簡潔性,也可以使用一些管理這些唯一主鍵的復雜操作;
建立主鍵的一種通用方法是使用XML文檔中的MD5求和檢驗。請記住如果你想在表中包括多份XML文檔,這一方法遠不足夠。在這種情況下,你可以添加額外的key fields標識鍵列。
與文檔表一樣,主鍵表很容易執行,它可以在表中查找特定的文檔。然而,與文檔表一樣,你仍然不能執行任何文本查詢;
3、有限離散表:
這一方法更加復雜,但它給你帶來更多的靈活性。使用有限離散表,你可以建立用於存儲有限分散的XML信息的表,這是什麼意思?請看以下的例子:
假設你具有一個順序文檔。在文檔的根部(Root)有一個Order元素,這一元素包括CustomerInfo, ItemInfo, 以及hippingInfo元素。在資料庫中,你可以建立一個OrderDoc表,表中包含一個ID域,一個CustomerInfoId域,一個ItemInfoId域,一個ShippingInfoId域。然而,你還可以建立一個CustomerInfoId表,一個ItemInfoId表,一個ShippingInfoId表。這些表都包含很多信息相關的各自的ID域,這些信息包括用戶,選項,郵寄信息。在這一表中,還包含著其它額外的等級。比如,CustomerInfo表包含AddressInfo域,即從AddressInfo表中引用的入口。
這種方法的優點是,允許你更緊密地建立XML數據的模型。這種方法使得你進行數據的一些成熟的查詢。它也使得數據的使用性更強,因為你不再需要XML分析器來讀取數據。
不足之處是這種方法需要更多的精力來開發和維護。這意味著每一文檔都需要解析成分離的部分,然後存儲在資料庫中。如果這一過程沒有得以很好管理,有可能會丟失一些數據。而且,這也意味著,當從一個資料庫中獲得一個XML文檔時,你不得不連接這些分散的部分。
6. XML與關系資料庫的關系
資料庫技術及其應用系統經歷了從層次資料庫、網狀資料庫到關系資料庫以及面向對象資料庫的發展,在傳統的商業和事務處理領域內逐步成熟,取代了原有的基於文件系統的數據處理方式,成為計算機信息系統中的重要基礎和支柱。但隨著Internet的飛速發展,Web的出現改變了人們習慣的處理方式,也給資料庫技術提出了必須面對的重要問題:即如何有效地存儲和管理Web上的數據(文檔),使其既能被高效地操作和維護,又能在Internet平台上方便地表示和交換。
XML技術自出現以來發展非常迅速,在許多領域內得到廣泛的支持而有著廣闊的應用前景。例如電子數據交換、電子商務等更是將XML作為一種基礎性、支柱性的技術來看待。
1、資料庫簡史
資料庫系統是隨著計算機技術的不斷發展,在特定的歷史時期、特定的需求環境下出現的。在1946年的第一台計算機到20世紀60年代這漫長的20年裡,計算機操作系統主要局限於文件的操作,對數據的管理也主要是通過文件系統來實現。進行計算所需要的各種數據存放在各自的文件里,使用這些數據時將文件打開,讀取文件中的數據到內存中,當計算完畢後,將計算結果仍舊寫入到文件中去,它的不足主要集中在無法對數據進行有效的統一管理。針對文件系統的重要缺點,人們逐步發展了以統一管理數據和共享數據為主要特徵的系統,即資料庫系統。1964年,美國通用電氣公司開發成功了世界上的第一個資料庫系統IDS(IntegratedDataStore)。IDS奠定了網狀資料庫的基礎,並得到了廣泛的發行和應用,成為資料庫系統發展史上的一座豐碑。1969年,美國國際商用機器公司(IBM)也推出世界上第一個層次資料庫系統IMS(InformationManagement System),同樣在資料庫系統發展史上佔有重要的地位。
70年代初,E.F.Codd在總結前面的層次、網狀資料庫優缺點的基礎上,提出了關系數據模型的概念及關系代數和關系演算。在70年代,關系資料庫系統無論從理論上還是實踐上都取得了豐碩的成果。在理論上確立了完整的關系模型理論、數據依賴理論和關系資料庫的設計理論;在實踐上,世界上出現了很多著名的關系資料庫系統,比較著名的如SystemR、INGRES、Oracle等。
與文件系統相比,資料庫系統有幾個方面的特點:向用戶提供高級的介面;向用戶提供非過程化的資料庫語言(即SQL語言);查詢的處理和優化;並發控制;數據的完整性約束。
進入80年代之後,計算機硬體技術的飛速提高促使計算機應用不斷深入,產生了許多新的應用領域,例如計算機輔助設計、計算機輔助製造、計算機輔助教學、辦公自動化、智能信息處理、決策支持等。這些新的領域對資料庫系統提出了新的要求。但由於應用的多元化,不能設計出一個統一的數據模型來表示這些新型的數據及其相互關系,因而出現了百家爭鳴的局面,產生了演繹資料庫、面向對象資料庫、分布式資料庫、工程資料庫、時態資料庫、模糊資料庫等新型資料庫的研究和應用。
2、XML簡介
XML推薦標准1.0版發布於1998年2月,之後迅速在全球掀起了XML應用的浪潮。XML是一種描述型的標記語言,與HTML同為SGML(標准通用標記語言,ISO-8879國際標准)的一種應用。由於XML在可擴展性、可移植性和結構性等方面的突出優點,它的應用范圍突破了HTML所達到的范圍。
一篇XML文檔由標記和內容組成。XML中有六種標記:元素(elements)、屬性(attributes)、實體引用(entityreferences)、注釋(comments)、處理指令(processinginstructions)和CDATA段(CDATAsections)。XML與HTML最顯著的不同是XML文檔中引入了「文檔類型聲明」(Document Type Declarations)。DTD使文檔可以與分析器交流關於它的內容的元信息。DTD的出現,賦予了XML文檔可擴展性、結構性和可驗證性,使XML具備了類似於資料庫的一些性質,可以利用XML來組織和管理信息;又可以與HTML一樣在瀏覽器中方便地表示,在Internet上高效地傳遞和交換。考慮到與HTML的兼容,DTD並不是XML文檔必需的成份。具有DTD的XML文檔稱作「Valid」,否則就是「Well-formed」。
目前,處理XML文檔的方式主要有SAX與DOM兩種。SAX(SimpleAPIforXML)是一種基於流的、以事件處理方式工作的介面。SAX 2.0在2000年5月發布,增強了許多功能,包括對名字空間的支持。DOM(Document Object Model)則是在對XML文檔進行分析後,在內存中建立起一個完整的樹結構,然後在此基礎上進行各種操作。簡單地比較來看,SAX對系統資源要求低、速度快,但對文檔的操作是只讀的;DOM的處理能力強大,但要求大量的系統資源,尤其是對於大的文檔。而後還出現了Xpath和Xpointer用以完成XML的搜索和轉換;XSL、XSLT和SOAP用以完成XML的遠程對象訪問,XML Query Languages的出現使XML查詢語言可用於任何XML文檔。
3、XML與資料庫
XML文件是數據的集合,它是自描述的、可交換的,能夠以樹型或圖形結構描述數據。XML提供了許多資料庫所具備的工具:存儲(XML文檔)、模式(DTD,XMLschema,RE1AXNG等)、查詢語言(XQuery,XPath,XQL,XML-QL,QUILT等)、編程介面(SAX,DOM,JDOM)等。但XML並不能完全替代資料庫技術。XML缺少作為實用的資料庫所應具備的特性:高效的存儲、索引和數據修改機制;嚴格的數據安全控制;完整的事務和數據一致性控制;多用戶訪問機制;觸發器、完善的並發控制等。因此,盡管在數據量小、用戶少和性能要求不太高的環境下,可以將XML文檔用作資料庫,但卻不適用於用戶量大、數據集成度高以及性能要求高的作業環境。
隨著Web技術的不斷發展,信息共享和數據交換的范圍不斷擴大,傳統的關系資料庫也面臨著挑戰。資料庫技術的應用是建立在資料庫管理系統基礎上的,各資料庫管理系統之間的異構性及其所依賴操作系統的異構性,嚴重限制了信息共享和數據交換范圍;資料庫技術的語義描述能力差,大多通過技術文檔表示,很難實現數據語義的持久性和傳遞性,而數據交換和信息共享都是基於語義進行的,在異構應用數據交換時,不利於計算機基於語義自動進行正確數據的檢索與應用;資料庫屬於高端應用,需要昂貴的價格和運行環境。而隨著網路和Internet的發展,數據交換的能力已成為新的應用系統的一個重要的要求。XML的好處是數據的可交換性(portable),同時在數據應用方面還具有如下優點:(1)XML文件為純文本文件,不受操作系統、軟體平台的限制;(2)XML具有基於Schema自描述語義的功能,容易描述數據的語義,這種描述能為計算機理解和自動處理;(3)XML不僅可以描述結構化數據,還可有效描述半結構化,甚至非結構化數據。
4、XML文件的存儲
XML文件的存儲方式有三大類:(1)將文件存儲於文件系統(StoringDocumentsinthe File System);(2)將文件存儲於BLOB(Storing Documents in BLOBs),利用資料庫的事務管理、安全、多用戶訪問等優點。此外許多關系資料庫提供的檢索工具可以進行全文檢索、近似檢索、同義詞檢索和模糊檢索。其中某些工具將會支持XML,這樣就可消除將XML文件作為純文本檢索所帶來的問題。(3)將文件存儲於原生XML資料庫(Native XML Databases,NXD)。NXD是專用於存儲XML文件的資料庫,支持事務管理、安全、多用戶訪問、編程API和查詢語言等。與其它資料庫的唯一區別在於其內部模型是基於XML的。其中,最重要的存儲方式當屬原生XML資料庫。
4.1原生XML資料庫
原生XML資料庫(NativeXMLDatabases)為XML文檔定義了一個(邏輯)模型,並根據該模型存取文件。這個模型至少應包括元素、屬性、PCDATA和文件順序。其例子有XPath數據模型、XMLIn-foset以及DOM所用的模型和SAX 1.0的事件。它以XML文件作為其基本存儲單位,對底層的物理存儲模型沒有特殊要求。例如,它可以建在關系型、層次型或面向對象的資料庫之上,或者使用專用的存儲格式,比如索引或壓縮文件。
NXD最適於存儲以文檔為中心的文件。這是由於NXD保留了文件、順序、處理指令、注釋、CDA-TA塊以及實體引用等,而支持XML的資料庫XED(XML-enableddatabase)無法做到。XED是在原有資料庫基礎上擴展了XML支持模塊,完成XML數據和資料庫之間的格式轉換和傳輸。從存儲粒度上,可以把整個XML文檔作為RDBMS表中一行,或把XML文檔進行解析後,存儲到相應的表格中。為了支持W3C的一些XML操作標准,Xpath、XED提供一些新的原語(如Oracle9iR2增加了一些數據包來操作XML數據等),並優化了XML處理模塊.
7. 資料庫中保存的xml與xml文件
在資料庫中保存:
sqlserver可以在sql語句中,對欄位中的xml進行xpath檢索。
如:select * from xxx where xpath(xxx.xmlfield, "/book/title") = "abc";
函數名我記不清了,大意就是這樣了。
可以統一備份方案。
方便查找。
大量記錄時,性能很高。
大小有限制,4G
xml文件:
優點:與資料庫比想不出什麼優點。
編程時要讀資料庫,知道文件名,再去打開文件IO,解讀。還要記得關掉。
大量的文件,性能很差。一個目錄里有幾萬個文件,基本就完蛋了。非常慢。
備份時要另外設計文件備份方案。
大體上就這些。
8. 如何將XML文件導入到資料庫中去
var tmpquery2:tadoquery;
tmpfile:string;
tmptable:tadotable;
begin
if application.MessageBox( '導入答案將會清空以前的考生答案,確定是否繼續? ', '提醒 ',MB_OKCANCEL or MB_ICONWARNING)=mrok then
begin
IF BSopen.Execute then
try
try
begin
tmpfile:=bsopen.FileName;
tmptable:=tadotable.Create(self);
tmpquery2:=tadoquery.Create (self);
tmpquery2.Connection :=dm.connect ;
tmptable.Connection :=dm.connect ;
tmptable.TableName:= 'exam_answer ';
with tmpquery2 do
begin
close;
sql.Clear;
sql.Add( 'delete * from exam_answer ');
execsql;
end;
tmptable.LoadFromFile(tmpfile);
tmptable.First;
while not tmptable.Eof do
begin
with tmpquery2 do
begin
close;
sql.Clear;
sql.Add( 'insert into exam_answer(kh,xm,sj_id,sjts,tk_id,stbh,tx,daa,dab,dac,dad,dae,daf,tkda,df) values(:kh,:xm,:sj_id,:sjts,:tk_id,:stbh,:tx,:daa,:dab,:dac,:dad,:dae,:daf,:tkda,:df) ');
parameters.ParamByName( 'kh ').Value :=tmptable.fieldbyname( 'kh ').AsString;
parameters.ParamByName( 'xm ').Value :=tmptable.fieldbyname( 'xm ').AsString;
parameters.ParamByName( 'sj_id ').Value :=tmptable.fieldbyname( 'sj_id ').AsString;
parameters.ParamByName( 'tx ').Value :=tmptable.fieldbyname( 'tx ').AsString;
parameters.ParamByName( 'sjts ').Value :=tmptable.fieldbyname( 'sjts ').AsString;
parameters.ParamByName( 'tk_id ').Value :=tmptable.fieldbyname( 'tk_id ').AsString;
parameters.ParamByName( 'stbh ').Value :=tmptable.fieldbyname( 'stbh ').AsString;
parameters.ParamByName( 'daa ').Value :=tmptable.fieldbyname( 'daa ').AsBoolean;
parameters.ParamByName( 'dab ').Value :=tmptable.fieldbyname( 'dab ').asboolean;
parameters.ParamByName( 'dac ').Value :=tmptable.fieldbyname( 'dac ').AsBoolean ;
parameters.ParamByName( 'dad ').Value :=tmptable.fieldbyname( 'dad ').AsBoolean ;
parameters.ParamByName( 'dae ').Value :=tmptable.fieldbyname( 'dae ').AsBoolean ;
parameters.ParamByName( 'daf ').Value :=tmptable.fieldbyname( 'daf ').AsBoolean ;
parameters.ParamByName( 'tkda ').Value :=tmptable.fieldbyname( 'tkda ').AsString;
parameters.ParamByName( 'df ').Value :=tmptable.fieldbyname( 'df ').AsString;
execsql;
end;
tmptable.next;
end;
showmessage( '導入完成,累死了... ')
end;
finally
tmptable.Free;
tmpquery2.Free;
end;
except
showmessage( '導入未完成。:( ')
end;
end;
end;
如果單純的LOAD出來,它是不直接寫到後台數據表的。分析下源碼就知道它LOAD之前先CLOSE了數據表。只有一條一條增加到後台數據表了。
9. 資料庫中的xml
關系資料庫是2維的,它表示數據的方式與XML表示數據的方法一至
10. XML和資料庫的區別
資料庫操作的話,畢竟是比較慢的,相對於xml來說,是有點復雜一些。如果是復雜多的數據的話,你就可以使用資料庫。但如果是很少的數據交互就使用xml