MySQL ExtractValue以下兄弟替代方案

时间:2013-11-13 23:16:49

标签: mysql xml xpath mariadb extract-value

我正在尝试从MySQL / MariaDB中的表中的XML中选择节点的值

根据MySQL文档,MySQL不支持following-sibling作为XPath轴。还有其他选择吗?

文档: http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue

我的XML结构类似于:

<fields>
    <record>
        <id>10</id>
        <value>Foo</value>
    </record>
    <record>
        <id>20</id>
        <value>Bar</value>
    </record>
</fields>

我需要找到ID为10的记录,并在<value></value>中获取文字。

有效的XPath将是/fields/record/id[text()=10]/following-sibling::value/text(),它将返回Foo

我有什么选择?

谢谢!

2 个答案:

答案 0 :(得分:3)

在这个简单的例子中,您不需要following-sibling。试试这个:

/fields/record[id[text()=10]]/value/text()

使用括号内的id标记会将您的上下文保留为record,以便以下斜杠下降到id的相应兄弟(与id具有相同的父级)。

答案 1 :(得分:0)

我有这个XML:

java.lang.NoClassDefFoundError: org/apache/derby/shared/common/security/SystemPermission
    at org.apache.derby.iapi.jdbc.JDBCBoot.boot(JDBCBoot.java:93)
    at org.apache.derby.iapi.jdbc.JDBCBoot.boot(JDBCBoot.java:68)
    at org.apache.derby.jdbc.EmbeddedDriver.<clinit>(EmbeddedDriver.java:95)
    at Testing.testConnection.main(testConnection.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.derby.shared.common.security.SystemPermission
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 4 more

下面是查询:

SELECT EXTRACTVALUE(xml, “列表/属性[Id [text()='NAME']] /值”) 从xx;

但是由于“字段列表”中的未知列“ List / Attribute [Id [text()='COUNTRY']] / Value”而出现错误