2016-04-07 124 views
0

我有一個XML文件是這樣的:的MySQL插入數據

<dbReference type="PM" id="17224074"/> 
<dbReference type="DOI" id="10.1186/bcr1637"/> 
</citation> 
<scope>VARIANTS ILE-282 AND ASN-777</scope> 
</reference> 
<comment type="function"> 
<text evidence="24">Calcium.</text> 
</comment> 
<comment type="function"> 
<text evidence="24">Has a strong inhibitory effect on APP C99 and C83 production.</text> 
</comment> 
<comment type="subunit"> 
<text evidence="5 13">Homodimer; disulfide-linked.</text> 
</comment> 
<comment type="interaction"> 
<interactant intactId="EBI-727477"/> 
<interactant intactId="EBI-7644904"> 
<id>Q9JIY2</id> 
<label>Cbll1</label> 
</interactant> 
<organismsDiffer>true</organismsDiffer> 
<experiments>21</experiments> 
</comment> 

我想僅提取

<comment type="function">...</comment> 

在這個例子是信息:「鈣」。 AND'作爲對APP C99和C83生產的強烈抑制作用。'

我有這個表,我要保存的數據:

CREATE TABLE IF NOT EXISTS INFORMATION (id varchar(255) NOT NULL, name varchar(255), entry varchar(255), comment longtext, PRIMARY KEY (id)); 

在那裏我會救「鈣」。 AND'作爲對APP C99和C83生產的強烈抑制作用。'在名爲'comment'的列中。 我以爲我可以直接從XML插入這個信息到LOAD XML表,但我的XML文件有太多不同的領域。 我該怎麼做?我是否必須首先從xml中提取數據,然後將其插入表中?

回答

1

使用XML解析器(如SAXParser)先解析文件,然後遍歷節點,查找註釋節點。對於每個具有「功能」類型的節點,都將節點文本放入數據庫中。

2

一種選擇,可以是有用的:

文件: '/path/to/xml/file/xmlfile.xml'

<dbReference type="PM" id="17224074"/> 
<dbReference type="DOI" id="10.1186/bcr1637"/> 
</citation> 
<scope>VARIANTS ILE-282 AND ASN-777</scope> 
</reference> 
<comment type="function"> 
    <text evidence="24">Calcium.</text> 
</comment> 
<comment type="function"> 
    <text evidence="24">Has a strong inhibitory effect on APP C99 and C83 production.</text> 
</comment> 
<comment type="subunit"> 
    <text evidence="5 13">Homodimer; disulfide-linked.</text> 
</comment> 
<comment type="interaction"> 
    <interactant intactId="EBI-727477"/> 
    <interactant intactId="EBI-7644904"> 
     <id>Q9JIY2</id> 
     <label>Cbll1</label> 
    </interactant> 
    <organismsDiffer>true</organismsDiffer> 
    <experiments>21</experiments> 
</comment> 

mysql命令行:

mysql> DROP TEMPORARY TABLE IF EXISTS `temp_information`; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

mysql> DROP TABLE IF EXISTS `information`; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `information` (
    -> `id` VARCHAR(255) NOT NULL, 
    -> `name` VARCHAR(255), 
    -> `entry` VARCHAR(255), 
    -> `comment` LONGTEXT, 
    -> PRIMARY KEY (`id`) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TEMPORARY TABLE IF NOT EXISTS `temp_information` (
    -> `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    -> `type` VARCHAR(20), 
    -> `text` TEXT, 
    -> `evidence` VARCHAR(20) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> LOAD XML INFILE '/path/to/xml/file/xmlfile.xml' 
    -> INTO TABLE `temp_information` 
    -> ROWS IDENTIFIED BY '<comment>'; 
Query OK, 4 rows affected (0.00 sec) 
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> INSERT INTO `information` (`id`, `comment`) 
    -> SELECT UUID(), GROUP_CONCAT(`text` ORDER BY `id` SEPARATOR ' ') 
    -> FROM 
    -> `temp_information` 
    -> WHERE 
    -> `type` = 'function' 
    -> GROUP BY `evidence`; 
Query OK, 1 row affected (0.00 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> SELECT 
    -> `id`, 
    -> `name`, 
    -> `entry`, 
    -> `comment` 
    -> FROM 
    -> `information`; 
+--------------------------------------+------+-------+------------------------------------------------------------------------+ 
| id         | name | entry | comment                | 
+--------------------------------------+------+-------+------------------------------------------------------------------------+ 
| e720d259-fcde-11e5-be3f-a4badbf9ce21 | NULL | NULL | Calcium. Has a strong inhibitory effect on APP C99 and C83 production. | 
+--------------------------------------+------+-------+------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> DROP TEMPORARY TABLE IF EXISTS `temp_information`; 
Query OK, 0 rows affected (0.00 sec) 

檢查: