2011-08-22 43 views
1

我有一个非常大的xml文件,我将它存储在名为xml的longtext字段中,名为imports。MySQL中的ExtractData支持名称空间吗?

然后,我将如今的xml字符串存储在名为@xml的用户变量中。

SELECT xml FROM imports WHERE DATE(updated_at) = DATE(NOW()) INTO @xml; 

我可以根据预期测试用户变量和数据的长度。

SELECT LENGTH(@xml); 

测试我的目标xml标签的位置也按预期工作。

SELECT LOCATE('sm:ProductCode>', @xml); 

但是,当我尝试对包含名称空间的XPath查询使用ExtractValue时,我得到空值。这个XPath查询已经过测试,可以在我的XPath探索软件中正常工作。

SELECT ExtractValue(@xml, '//sm:ProductCode'); 

回答

1

它被支撑为5.1.10:

与MySQL 5.1.10开始,)作为参数传递给对extractValue()和如updateXML(XPath表达式可以包含冒号(“: “)在元素选择器中,这使得它们可以与使用XML名称空间标记的标记一起使用。

如果您的版本较旧,则无法执行任何操作,XPath namespace-uri()函数可用作解决方法,但不受支持。

+0

对不起,我应该提到我使用的是5.1.41,我也在5.5.14上测试过 我读到了关于:字符的支持,但是有很少的文档可用,我想也许我正在点击此功能的限制。 有没有办法告诉MySQL包含在@xml中的数据是xml?所有字符串函数都可以正常工作,但XPath只返回null。 –