2016-04-07 126 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) 

检查: