首页 > 解决方案 > 如何在 MySQL 的 ExtractValue 中使用 XPath `(//path)[n]` 语法

问题描述

我正在尝试使用 MySQL (5.7) 获取出现在 XML 结构的任何部分的指定标记的第二个实例的值。

一个示例 XML 提取是:

SET @xml = '
<root>
    <lang>English</lang>
    <lang>French</lang>
    <section>
        <lang>German</lang>
        <lang>Bulgarian</lang>
    </section>
</root>
';

我通常会使用 XPath (//lang)[2],在这种情况下应该获得“法语”,但这在 MySQL 中不起作用:

SELECT ExtractValue(@xml, '(//lang)[2]');

-- Result should be: "French"
-- but server response is instead:
-- "#1105 - XPATH syntax error: '[2]'"

类似的语法,这不是我们想要的,可以编译,但显然会产生不想要的结果:

SELECT ExtractValue(@xml, '//lang[2]');

-- Result, which is not what is wanted, is: "French Bulgarian"

请注意,该值可能出现在结构中的任何位置。我试图在任何地方找到例如第二个实例。

MySQL真的支持(//path)[n]语法吗?我相信这是 MySQL 应该支持的 XPath 1.0。

标签: mysqlxpath

解决方案


推荐阅读