gpt4 book ai didi

mysql - 为什么这个 "extractvalue"返回 null

转载 作者:行者123 更新时间:2023-11-29 15:41:32 26 4
gpt4 key购买 nike

我需要直接从 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|
----------------

我认为我必须准确指定需要哪个子元素,但我不知道为什么总是返回 null。

我正在使用 mySql 工作台和 Xampp

谢谢大家

编辑

我刚刚在文件路径中添加了一个“\”反斜杠,现在 extractvalue 返回“blob”,这样

SET @xmlFile = load_file('c:\\xampp\\mysql\\data\\test_folder\\test_file.xml ');



------------
| keywords |
------------
|BLOB |
------------

最佳答案

您的 xml 文件无效,缺少结尾 </tbl_tutorials> ,因此你得到 null (无论您尝试提取什么)。

如果修复它,您的查询将返回每个关键字,请参阅 ExtractValue 的文档:

If multiple matches are found, the content of the first child text node of each matching element is returned (in the order matched) as a single, space-delimited string.

要获取第一个“行”标签的关键字,您可以使用

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 

关于mysql - 为什么这个 "extractvalue"返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57582845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com