導航:首頁 > 編程大全 > 如何將xml導入資料庫

如何將xml導入資料庫

發布時間:2025-08-02 16:59:03

㈠ 使用MySQL解析和處理XML文件的方法與技巧mysqlxml文件

MySQL作為一種關系型資料庫管理系統,被廣泛應用於各個領域中,同時,XML作為一種表示和傳輸數據的標准格式,也得到了廣泛的運用。在實際應用中,有時需要將XML文件中的數據進行解析和處理後,存儲到MySQL資料庫中。本文將介紹使用MySQL解析和處理XML文件的方法與技巧。
1. XML文件的解析
XML文件的解析是將XML文件中的數據提取出來,並轉換為可操作的數據類型,例如json、字典等。MySQL提供了解析XML文件的函數,主要有以下兩個:
LOAD XML:將XML數據裝入MySQL資料庫中。
SELECT … FROM XML:從XML文件中檢索數據。
其中,LOAD XML語法如下:
LOAD XML [LOCAL] INFILE ‘file_name’
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY ‘term’]
[[OPTIONALLY] ENCLOSED BY ‘enclosure’]
[ESCAPED BY ‘escape_char’]]
[LINES TERMINATED BY ‘term’]
[IGNORE number LINES]
[(col_name_or_user_var,…)]
通過該語法可以將指定的XML文件裝入到指定表格中,同時可以指定一些參數來控制導入行為。
除此之外,SELECT … FROM XML語法可以實現從XML文件中檢索數據的功能,SQL語句如下:
SELECT extractvalue(xml_doc, xpath_expr)
FROM table_name
WHERE [some_condition];
其中,extractvalue()函數是從XML文件中提取值的函數,xpath_expr是XPath表達式,通過該語法我們可以輕松地從XML文件中查詢所需的數據。
2. XML文件處理
XML文件處理是將XML文件中的數據轉換成需要的格式,例如json、csv、Excel等。在處理XML文件時,我們可以使用一些開源的工具庫,例如Python中的xmltodict、lxml等庫。
xmltodict是Python中用於將XML文件轉換為字典的庫,可以簡化XML文件的解析和處理工作。下面是一個簡單的示例代碼
import xmltodict
# 將XML文件轉換為字典
with open(‘example.xml’) as fd:
doc = xmltodict.parse(fd.read())
# 取得XML文件中的數據
print(doc[‘data’])
在以上代碼中,我們通過xmltodict庫將XML文件解析成字典,然後就可以非常方便地進行數據的提取和處理。
3. 將XML文件數據存儲到MySQL資料庫中
將XML文件中的數據存儲到MySQL資料庫中是常見的需求之一。下面是一個簡單的Python代碼示例,用於將XML文件中的數據讀取後存儲到MySQL資料庫中。
import xml.etree.ElementTree as ET
import MySQLdb
# 解析XML文件
xml_tree = ET.parse(‘example.xml’)
xml_root = xml_tree.getroot()
# 配置MySQL連接信息
db = MySQLdb.connect(host=’localhost’, user=’root’, passwd=’test’, db=’test’, charset=’utf8′)
cursor = db.cursor()
# 遞歸解析XML並將數據存入MySQL資料庫中
def parse_xml(elem, parent_id=None):
for node in elem:
# 如果該節點為葉子節點,將其存儲到資料庫中
if node.getchildren() == []:
cursor.execute(“INSERT INTO xml_test (parent_id, name, value) VALUES (%s, %s, %s)”, (parent_id, node.tag, node.text))
print(node.tag, node.text)
else:
cursor.execute(“INSERT INTO xml_test (parent_id, name, value) VALUES (%s, %s, null)”, (parent_id, node.tag))
print(node.tag)
parse_xml(node, cursor.lastrowid)
# 從根節點開始解析XML文件
parse_xml(xml_root)
# 提交事務
db.commit()
在以上代碼中,我們使用了Python庫xml.etree.ElementTree來解析XML文件,然後將數據存儲到MySQL資料庫中。解析的過程是遞歸的,從根節點開始,如果當前節點為葉子節點,則將其存儲到資料庫中,否則執行遞歸操作,直至所有節點都被處理完畢。
總結
本文介紹了使用MySQL解析和處理XML文件的方法和技巧。MySQL提供了從XML文件中提取數據和將XML數據裝入MySQL資料庫中的函數,可以方便地完成XML文件的解析和處理,同時,Python的xmltodict庫也可以簡化XML文件的解析過程。對於將XML文件中的數據存儲到MySQL資料庫中,我們可以使用Python庫xml.etree.ElementTree遞歸解析XML文件,並使用MySQLdb庫將解析後的數據存儲到MySQL資料庫中。

㈡ 如何將JSON,Text,XML,CSV 數據文件導入 MySQL

將外部數據導入(import)資料庫是在資料庫應用中一個很常見的需求。其實這就是在數據的管理和操作中的ETL (Extract, transform, load)的L (Load)部分,也就是說,將特定結構(structure)或者格式(format)的數據導入某個目的地(比如資料庫,這里我們討論MySQL)。

ETL Process

本文要討論的內容,是如何方便地將多種格式(JSON, Text, XML, CSV)的數據導入MySQL之中。

本文大綱:

將Text文件(包括CSV文件)導入MySQL
將XML文件導入MySQL
將JSON文件導入MySQL
使用MySQL workbench的Table Data Export and Import Wizard進行JSON或CSV文件的導入導出

1. 將Text文件(包括CSV文件)導入MySQL

這里我們的討論是基於一個假定,Text file和CSV file是有著比較規范的格式的(properly formatted),比如說每行的每個數據域(field)之間是由一個共同的分隔符(比如tab: \t)分隔的。

那麼首先,你需要根據你的數據的格式(有哪些域),來設計好資料庫的對應的表 (的Schema)。

舉個例子,要處理的Text文件或者CSV文件是以\t作為分隔符的,每行有id, name, balance這么三個數據域,那麼首先我們需要在資料庫中創建這個表:

CREATE TABLE sometable(id INT, name VARCHAR(255), balance DECIMAL(8,4));

創建成功以後就可以導入了。操作方式很簡單:

LOAD DATA LOCAL INFILE '你的文件路徑(如~/file.csv)' INTO TABLE sometable FIELDS TERMINATED BY '\t' [ENCLOSED BY '"'(可選)] LINES TERMINATED BY '\n' (id, name, balance)

這里要注意的是,我們需要開啟local-infile這個MySQL的配置參數,才能夠成功導入。究其原因,從MySQL的Manual中可以看到這么一段話:

LOCAL works only if your server and your client both have been configured to permit it. For example, if mysqld was started with --local-infile=0, LOCAL does not work. See Section 6.1.6, 「Security Issues with LOAD DATA LOCAL」.

這是MySQL出於安全考慮的默認配置。因此,我們需要在配置文件my.cnf中(以Debian發行版的Linux, 如Ubuntu為例, 即是在/etc/my.cnf中),確保:

local-infile=1

抑或是在命令行啟動MySQL時加上--local-infile這一項:

mysql --local-infile -uroot -pyourpwd yourdbname

此外,我們也可以使用MySQL的一個官方導入程序mysqlimport ,這個程序本質上就是為LOAD DATA FILE提供了一個命令行的interface,很容易理解,我們這里就不再詳述。

2. 將XML文件導入MySQL

這件事的完成方式,與我們的XML的形式有著很大的關系。

舉個例子說,當你的XML數據文件有著很非常規范的格式,比如:
<?xml version="1.0"?>
<row>
<field name="id">1</field>
<field name="name">Free</field>
<field name="balance">2333.3333</field>
</row>

<row>
<field name="id">2</field>
<field name="name">Niki</field>
<field name="balance">1289.2333</field>
</row>

或者
<row column1="value1" column2="value2" .../>

我們就可以很方便使用LOAD XML來導入,這里可以參見MySQL的官方手冊--LOAD XML Syntax。

然而我們可能有另外一些需求,比如說,我們可能會想要將XML文件的域映射到不同名字的列(TABLE COLUMN)之中。這里要注意,MySQL v5.0.7以後,MySQL的Stored Procere中不能再運行LOAD XML INFILE 或者LOAD DATA INFILE。所以轉換的程序(procere)的編寫方式與在此之前有所不同。這里,我們需要使用Load_File()和ExtractValue()這兩個函數。

以下是一個示例XML文件和程序:
文件:
<?xml version="1.0"?>
<some_list>
<someone id="1" fname="Rob" lname="Gravelle"/>
<someone id="2" fname="Al" lname="Bundy"/>
<someone id="3" fname="Little" lname="Richard"/>
</some_list>

程序:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `import_some_xml`(path varchar(255), node varchar(255))
BEGIN
declare xml_content text;
declare v_row_index int unsigned default 0;
declare v_row_count int unsigned;
declare v_xpath_row varchar(255);

set xml_content = load_file(path);

-- calculate the number of row elements.
set v_row_count = extractValue(xml_content, concat('count(', node, ')'));

-- loop through all the row elements
while v_row_index < v_row_count do
set v_row_index = v_row_index + 1;
set v_xpath_row = concat(node, '[', v_row_index, ']/@*');
insert into applicants values (
extractValue(xml_content, concat(v_xpath_row, '[1]')),
extractValue(xml_content, concat(v_xpath_row, '[2]')),
extractValue(xml_content, concat(v_xpath_row, '[3]'))
);
end while;
END

在MySQL中,使用它進行導入:

call import_some_xml('你的XML文件路徑', '/some_list/someone');

程序相當的直白,只要了解一下MySQL的腳本編寫即可。

這里提一下DELIMITER $$。我們知道MySQL的命令分隔符默認為分號,然而腳本中很顯然是有分號的,但是我們並不希望立即執行,所以我們需要臨時更改分隔符。

3. 將JSON文件導入MySQL

如何將JSON文件導入MySQL中,是一個很有趣的話題。JSON是一種現在相當常用的文件結構,所以掌握它的導入具有比較廣泛的意義。

很多時候,我們處理的JSON數據是以如下形式出現的:
{"name":"Julia","gender":"female"}
{"name":"Alice","gender":"female"}
{"name":"Bob","gender":"male"}
{"name":"Julian","gender":"male"}

而並不是規整的[{},{},{},{}](一些NoSQL資料庫的Export)。

這樣的形勢對於載入有一個好處:因為每一行是一個JSON Object,所以我們便可以按行處理此文件,而不需要因為JSON的嚴格結構將整個文件(比如一個許多G的.json文件)全部載入。

方式一 使用common-schema

common-schema是一個應用很廣泛的MySQL的框架,它有著很豐富的功能和詳細的文檔。我們可以使用它的JSON解析的功能。(它還具有JSON轉換成XML等等方便的功能)

具體說來,將common-schema導入之後,使用它的extract_json_value函數即可。源碼中:
create function extract_json_value(
json_text text charset utf8,
xpath text charset utf8
) returns text charset utf8

該函數接受兩個參數,一個是json_text,表示json文件的內容,另一個是xpath,表示數據的結構(這里可以類比XML文件的處理)。很多讀者應該知道,XPath是用來對XML中的元素進行定位的,這里也可以作一樣的理解。

以本段開始的幾行JSON為例,這里common-schema的使用如下例:
select common_schema.extract_json_value(f.event_data,'/name') as name, common_schema.extract_json_value(f.event_data,'/gender') as gender, sum(f.event_count) as event_count from json_event_fact f group by name, gender;

關於event_data,我們需要先理解LOAD DATA INFILE是一個event,不同的event type對應不同的event data。這部分知識可以參看Event Data for Specific Event Types

如果感興趣,可以參看其源碼。參看一個受到廣泛使用的項目的源碼,對於自身成長是很有益的。

當然了,我們也可以像之前處理XML文件導入一樣,自己編寫程序。這里便不再給出實常式序,有興趣的讀者可以自行編寫或者跟筆者交流。

方式二 使用mysqljsonimport

這是Anders Karlsson的一個完成度很高的作品。這一份程序由C寫成。它依賴於一個JSON Parser,Jansson。他們都有著比較好的維護和文檔,所以使用上體驗很好。

mysqljsonimport的下載在SourceForge上。具體使用參照其文檔即可。

為了方便不熟悉源碼安裝的朋友,筆者在這里提一下安裝流程和注意事項。
安裝命令順序如下:
$ wget http://sourceforge.net/projects/mysqljson/files/myjsonimport_1.6/mysqljsonimport-1.6.tar.gz
$ tar xvfz mysqljsonimport-1.6.tar.gz
$ cd mysqljsonimport-1.6
$ ./configure –-with-mysql=/xxx/mysql
$ make
$ make check
$ sudo make install

--with-mysql這一步不是必要的,只要你安裝的mysql的路徑是系統的默認路徑。很關鍵的,而且很容易被不熟悉的朋友忽略的是,這一個C程序要成功編譯和運行,是需要MySQL的C API的,所以需要安裝的依賴,除了jansson,還有libmysqlclient-dev。

jansson的安裝就是簡單的源碼安裝,libmysqlclient-dev則可以使用包管理工具(比如ubuntu中使用apt-get即可;編譯和安裝前,建議先sudo apt-get update以避免不必要的麻煩)。

導入命令:
$ ./mysqljsonimport –-database test –-table tablename jsonfilename

還有一個parser,作者是Kazuho,感興趣的讀者可以參看一下,他的相關博文是mysql_json - a MySQL UDF for parsing JSON ,github項目是mysql_json。

4. 使用MySQL workbench

Workbench這個工具對於許多不熟悉SQL語言或者命令行的朋友還是很方便和友好的。利用它,可以方便地導入和導出CSV和JSON文件。

具體操作圖例參見MySQL官方手冊即可:Table Data Export and Import Wizard,這里不再贅述。

文/freenik(簡書作者)
原文鏈接:http://www.jianshu.com/p/d330edb61fe2

㈢ Spring Batch教程(二)示例:將txt文件轉成xml文件以及讀取xml文件內容存儲到資料庫mysql

Spring Batch教程:txt文件轉成xml文件以及讀取xml文件內容存儲到MySQL資料庫

一、txt文件轉換為xml

  1. 使用Maven依賴

    • 配置與Spring Batch相關的庫,確保項目中包含Spring Batch的核心依賴。
  2. 創建測試txt文件

    • 創建一個名為personInfo.txt的測試文件,包含需要轉換的數據。
  3. 定義PersonInfo bean並創建FieldSetMapper

    • 定義一個PersonInfo類來映射txt文件中的數據結構。
    • 創建FieldSetMapper實現類,用於將txt文件的每一行映射到PersonInfo對象。
  4. 實現ItemProcessor

    • 實現ItemProcessor介面,對PersonInfo對象進行處理,例如過濾salary欄位,將大於等於100的值設置為100×0.8。
  5. 添加JobExecutionListener

    • 添加JobExecutionListener監聽job的執行狀態,以便在job開始和結束時執行自定義邏輯。
  6. 配置job

    • 在springbatchcontext2.xml中配置job,包括步驟、reader、processor和writer等組件。
  7. 運行main類並驗證輸出

    • 編寫main類來運行job,並驗證控制台輸出和生成的personInfo.xml文件。

二、讀取xml文件寫入MySQL

  1. 創建測試xml文件

    • 創建一個名為PersonInfo.xml的測試文件,包含需要讀取的數據。
  2. PersonInfo bean設置和ItemProcessor處理

    • 定義PersonInfo類。
    • 實現ItemProcessor介面,對PersonInfo對象進行處理,例如將salary小於75的值設置為1.5倍。
  3. 增加JobExecutionListener

    • 同txt轉xml步驟,添加JobExecutionListener監聽job的執行狀態。
  4. 創建數據轉換器

    • 實現數據轉換器,將PersonInfo對象的屬性映射到資料庫表的欄位。
  5. 配置job和數據源

    • 在springbatchcontext3.xml中配置job,包括步驟、reader、processor和writer。
    • 配置數據源,包括資料庫連接信息、驅動和用戶名密碼等。
  6. 運行main類並驗證

    • 編寫main類來運行job,創建MySQL表,並驗證控制台輸出和資料庫插入結果。

通過以上步驟,您可以實現txt文件到xml文件的轉換,並將xml文件的內容讀取後存儲到MySQL資料庫中。這兩個示例展示了Spring Batch在文件處理和資料庫操作中的強大功能。

閱讀全文

與如何將xml導入資料庫相關的資料

熱點內容
word怎麼打出公差 瀏覽:402
80網路 瀏覽:286
編程課主要學哪些東西 瀏覽:661
hypermesh生成op2文件 瀏覽:843
ftp文件下載指定位置命令 瀏覽:498
mac命令轉移文件 瀏覽:490
qq消息界面如何設置在哪裡設置密碼 瀏覽:292
2007版本excel行求和 瀏覽:265
ps自動儲存文件怎麼恢復 瀏覽:687
編程中23是什麼意思 瀏覽:803
投票網站怎麼製作 瀏覽:937
資料庫文件構成 瀏覽:215
樂視網安卓vip 瀏覽:863
jsgetelementbycss 瀏覽:642
表示數據遞增關系有什麼數學關系 瀏覽:64
找小米8哪些文件能刪除 瀏覽:468
疫情結束後學什麼編程 瀏覽:383
ps用直線工具畫箭頭保存不到 瀏覽:665
培訓學校復課需要准備哪些文件 瀏覽:566
圖片文件上傳特殊字元 瀏覽:692

友情鏈接