2013-02-22 38 views
0

我想將大型XML文件中的一些項目導入到mysql表中。比方說,XML包含上千項,如:如何將xml的一部分導入到mysql表中?

<CD> 
<TITLE>Empire Burlesque</TITLE> 
<ARTIST>Bob Dylan</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>Columbia</COMPANY> 
<PRICE>10.90</PRICE> 
<YEAR>1985</YEAR> 
</CD> 

但我只需要「TITLE」,並導入到MySQL的CD表中的每個CD的「YEAR」。

我知道有一個'LOAD XML'mysql 5. +從xml獲取數據到mysql,但顯然它映射了整個xml,這不是我所需要的。所以我感謝你的幫助。

+0

[你嘗試過什麼?](HTTP ://www.whathaveyoutried.com/)請參見[ask advice](http://stackoverflow.com/questions/ask-advice)。 – 2013-02-22 18:56:04

+0

你使用什麼編程語言?我有一個PHP示例解決方案,如果你使用它。 – 2013-02-22 18:59:22

+0

@JohnConde,我試圖找到合適的工具。 – supermario 2013-02-22 18:59:52

回答

2

感謝ABASE omment,我想通了,最簡單的方法從XML到MySQL表導入所需的字段是使用內置的MySQL負荷XML功能,如:

LOAD XML LOCAL INFILE '/path/to/file.xml' INTO TABLE cds ROWS IDENTIFIED BY '<CD>'; 

如果你以前創建cds表格由您需要從file.xml的列。

只需注意在MySQL 5.5以上時需要您輸入mysql命令行添加「--local-infile的」標誌,否則,你得到一個錯誤1148

+0

快樂你找到了解決方案! – abase 2013-02-26 15:25:52

3

使用SimpleXML加載XML,然後遍歷這些值。我的例子使用simplexml_load_string(),你可以很容易地使用simple_load_file()

$string = <<<XML 
<?xml version='1.0'?> 
<CDS> 
<CD> 
<TITLE>Empire Burlesque</TITLE> 
<ARTIST>Bob Dylan</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>Columbia</COMPANY> 
<PRICE>10.90</PRICE> 
<YEAR>1985</YEAR> 
</CD> 
<CD> 
<TITLE>Empire Burlesque2</TITLE> 
<ARTIST>Bob Dylan</ARTIST> 
<COUNTRY>USA</COUNTRY> 
<COMPANY>Columbia</COMPANY> 
<PRICE>10.90</PRICE> 
<YEAR>1986</YEAR> 
</CD> 
</CDS> 
XML; 

$xml = simplexml_load_string($string); 

foreach ($xml as $cd) 
{ 
    // Your mysql functions for inserting goes here 
    echo $cd->TITLE . "<br>"; 
    echo $cd->YEAR . "<br>"; 
} 

See it in action

希望,讓你在正確的方向點。

2

所以,你可以有這樣的方法來完成這項工作:

  • 所有元素轉換你的大XML文件轉換成較小的XML文件,只需要要素
    使用XSLT轉換
  • 比使用XML像SAXON,DOM或其​​他語法分析器解析新的小XML文件
  • 使用一些編程語言,它將爲您執行解析和數據庫轉儲部分。
    例如,如果您計劃使用java,則可以使用稱爲JAXB的概念將您的XML解組到Java對象,並將它們填充到數據庫中。

如果您可以共享關於您的原始XML的更多信息以及您希望從他們獲得哪些元素,我可以爲您發佈解決方案。

希望這會幫助你。