2013-04-20 176 views
1

下午好!導入XML(CDATA)

我在所有的網絡研究,我沒有發現任何關於它。這很奇怪,也許這是個人問題。因爲任何人都有我這樣的問題。

所以,我在mysql中做了一個簡單的命令,使這項工作

LOAD XML LOCAL INFILE 
    'person.xml' 
INTO TABLE 
    person 
ROWS IDENTIFIED BY 
    '<person>' 

person.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<list> 
    <person> 
     <field name="person_id">5</field> 
     <field name="fname"><![CDATA[Ronström]]></field> 
     <field name="lname">Ulin</field> 
    </person> 
    <person> 
     <field name="person_id">6</field> 
     <field name="fname"><![CDATA[Mikael]]></field> 
     <field name="lname">Sköld</field> 
    </person> 
</list> 

的插入的文件是沒有問題的完成,問題是,沒有使插入標籤CDATA內的值,它返回NULL。有一些方法可以去掉那個標籤,只返回值!!

+1

(也沒有答案)可能的複製http://stackoverflow.com/questions/13107639/problems-with -mysql-load-xml-infile和http://stackoverflow.com/questions/12882983/importing-xml-to-mysql-errors – 2013-04-20 18:32:08

+0

查理......這兩個主題都沒有解決方案......我需要一些解決方案到那簡單的細節。順便說一句,謝謝幫助我。 – Ronaldo 2013-04-20 19:18:45

+0

我知道你想要一個解決方案...我做了一些搜索,但沒有遇到過這個。 : - / – 2013-04-20 22:01:32

回答

0

我無法使用LOAD XML INFILE來使用它 - 它似乎吃掉了CDATA的內容。

雖然我確實使用普通舊LOAD DATA INFILE工作。鑑於你的示例XML文件,該表:

CREATE TABLE `people` (
    `person_id` int(11) NOT NULL PRIMARY KEY, 
    `fname` text, 
    `lname` text 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

運行此從文件導入數據到表:

LOAD DATA INFILE 
    '/tmp/person.xml' 
INTO TABLE 
    people 
CHARACTER SET 'utf8' 
LINES STARTING BY '<person>' TERMINATED BY '</person>' 
(@person) 
SET 
    person_id = ExtractValue(@person, '//field[@name="person_id"]'), 
    fname  = ExtractValue(@person, '//field[@name="fname"]'), 
    lname  = ExtractValue(@person, '//field[@name="lname"]') 
; 

這是通過告訴LOAD DATA INFILE每個<person>...</person>是邏輯「行',它存儲在本地變量@person中。然後我們將其作爲XML片段傳遞給ExtractValue()函數,使用適當的XPath表達式從中選擇我們想要的值,並將結果存儲在適當的列中。

0

羅納爾多, 這可能會或可能不會涉及您的問題(你可能已經找到了解決辦法),但其他人:

如果您使用PHP來加載XML文件:

您需要加載LIBXML_NOCDATA標誌設置的xml文件。這將正確拉入。

所以,如果你收到: $xml = simplexml_load_file('some/file/path.xml');

你想這樣的:

$xml = simplexml_load_file('some/file/path.xml',null,LIBXML_NOCDATA);