我需要直接从一个xml文件中直接提取值,精确到一个字段,但是我总是得到NULL值。
将文件导入表没有问题。该文件位于c:\ xampp \ mysql \ data \ test_folder \ test_file.xml。
我使用这种方式导入它:
LOAD XML INFILE 'test_file.xml'
INTO TABLE tbl_tutorials
CHARACTER SET utf8
ROWS IDENTIFIED BY '<row>'
;
我已经准备好以这种方式创建表
CREATE TABLE IF NOT EXISTS tbl_tutorials(
item_id INT(11) NOT NULL,
title VARCHAR(100) NOT NULL,
link VARCHAR(120) NOT NULL,
description VARCHAR(400) NOT NULL,
keywords VARCHAR (50) NOT NULL
) ;
我的test_file.xml是
<?xml version="1.0" encoding="UTF-8"?>
<tbl_tutorials>
<row>
<item_id>1</item_id>
<title>test title 1</title>
<link>test link 1</link>
<description>test description 1</description>
<keywords>test keyword 1</keywords>
</row>
<row>
<item_id>2</item_id>
<title>test title 2</title>
<link>test link 2</link>
<description>test description 2</description>
<keywords>test keyword 2</keywords>
</row>
<row>
<item_id>3</item_id>
<title>test title 3</title>
<link>test link 3</link>
<description>test description 3</description>
<keywords>test keyword 3</keywords>
</row>
</tbl_tutorials>
我想做的是创建一个包含所有xml代码的“ var”(不知道这是否是确切的术语),然后从该var中提取所需的值。
这样...
SET @xmlFile = load_file('c:\xampp\mysql\data\test_folder\test_file.xml ');
SELECT extractvalue(@xmlFile , '/tbl_tutorials/row/keywords') keywords;
我得到的是
------------
| keywords |
------------
|NULL |
------------
我需要的是
----------------
| keywords |
----------------
|test keyword 1|
----------------
我认为我必须确切地指定需要哪个子元素,但是我不知道为什么总会返回空值。
我正在使用mySql工作台和Xampp
谢谢大家
修改
我刚刚在文件路径中添加了反斜杠“ \”,现在extractvalue通过这种方式返回“ blob”
SET @xmlFile = load_file('c:\\xampp\\mysql\\data\\test_folder\\test_file.xml ');
------------
| keywords |
------------
|BLOB |
------------
答案 0 :(得分:0)
您的xml文件无效,缺少结尾</tbl_tutorials>
,因此您得到null
(无论您尝试提取什么)。
如果您对其进行了修复,则查询将返回每个关键字,但请参见ExtractValue
的文档:
如果找到多个匹配项,则每个匹配元素的第一个子文本节点的内容(以匹配的顺序)作为单个以空格分隔的字符串返回。
要获取第一个“行”标签的关键字,可以使用
SELECT ExtractValue(@xmlFile , '/tbl_tutorials/row[1]/keywords') keywords
请注意,“行”标记是编号的,而不是关键字。如果您使用例如
SELECT ExtractValue(@xmlFile , '/tbl_tutorials/row/keywords[1]') keywords
您将获得每一行的第一个关键字,在您的情况下,这是每个关键字;您可以使用此功能,例如每行有几个关键字,那么这将为您提供(每行)的第一个关键字。
您还可以通过其属性指定行,例如item_id
:
SELECT ExtractValue(@xmlFile , '/tbl_tutorials/row[item_id="1"]/keywords') keywords
要获取关键字标签的总数(将由原始查询返回),可以使用
SELECT ExtractValue(@xmlFile , 'count(/tbl_tutorials/row/keywords)') cnt
答案 1 :(得分:0)