来自XML的MYSQL ExtractValue返回大空白

时间:2011-03-16 15:05:43

标签: mysql xml

我正在尝试使用ExtractValue MYSQL函数从存储在我的数据库的一列中的xml返回一个段。以下是我如何设置所有内容。

表:

    create table documents  
    (  
    id int NOT NULL AUTO_INCREMENT PRIMARY KEY,  
    application_id int NOT NULL,    
    content MEDIUMTEXT NOT NULL  
    );

插入:

insert into documents values (null, 1,
    '<?xml version="1.0" encoding="ISO-8859-1"?>

    <bookstore>

    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>

    <book>
      <title lang="eng">Learning XML</title>
      <price>39.95</price>
    </book>

    </bookstore>');

查询:

SELECT content from documents into @xml;  
SELECT ExtractValue(@xml, '/bookstore');

第二个查询返回一个非常大的空文本空间。几乎看起来空的空间等于应该返回的空间并且有趣的是当我使用应该返回较小结果的xpath时,空白字段会缩小。

我非常感谢这个问题的一些帮助,并乐意提供更多信息或尝试任何事情。

2 个答案:

答案 0 :(得分:5)

这不是ExtractValue的用途。它用于提取特定值,而不是整个元素。

以下是使用ExtractValue和示例XML字符串提取价格值的示例:

mysql> set @xml = '<?xml version="1.0" encoding="ISO-8859-1"?>
    '>     <bookstore>
    '>     <book>
    '>       <title lang="eng">Harry Potter</title>
    '>       <price>29.99</price>
    '>     </book>
    '>     <book>
    '>       <title lang="eng">Learning XML</title>
    '>       <price>39.95</price>
    '>     </book>
    '>     </bookstore>';
Query OK, 0 rows affected (0.00 sec)

mysql>     
mysql> SELECT ExtractValue(@xml, '/bookstore/book/price');
+---------------------------------------------+
| ExtractValue(@xml, '/bookstore/book/price') |
+---------------------------------------------+
| 29.99 39.95                                 |
+---------------------------------------------+
1 row in set (0.00 sec)

答案 1 :(得分:3)

也许这与behavior of ExtractValue

有关
  

[ExtractValue()]返回文本   (CDATA)的第一个文本节点   是匹配的元素的子元素   通过XPath表达式。

  

ExtractValue()仅返回CDATA,和   不会返回任何可能的标签   包含在匹配标记内,也不包含   他们的任何内容(见结果   在下面以val1的形式返回   例子)。

/bookstore下的第一个文本节点是<book>之前的空格。