从MySQL中的XML中检索的提取数据重复

时间:2016-09-06 06:31:43

标签: mysql sql xml xpath xml-parsing

MySQL版本10.1.13-MariaDB

我需要迭代地检索特定元素中m属性的值

SELECT ExtractValue( 
'<a>
    <b>
        <c m="e1">
            <k>asde1</k>
        </c>
        <c m="e2">
            <k>asdae2</k>
        </c>
        <c m="e3">
            <k>asdae3</k>
        </c>
    </b>
    <b>
        <c m="l1">
            <k>asdl1</k>
        </c>
        <c m="l2">
            <k>asdal2</k>
        </c>
        <c m="l3">
            <k>asdal3</k>
        </c>
    </b>
</a>',

'//@m[1]' ) AS result;

我的结果是

e1 e2 e3 l1 l2 l3

我需要的是

e1

1 个答案:

答案 0 :(得分:2)

您的查询

SELECT ExtractValue( 
'SomeXML',
'//@m[1]' ) AS result;
由于//开头的XPath

会执行深度搜索。这意味着:使用名称&#34; m&#34;查找任何属性并返回它的价值!

使用XML,尽可能具体是一个好主意:

SELECT ExtractValue( 
'SomeXML',
'/a[1]/b[1]/c[1]/@m' ) AS result;

这意味着:从根开始并搜索第一个&#34; a&#34;,搜索第一个&#34; b&#34;第一个&#34; c&#34;这个元素有一个属性&#34; m&#34;。

你可以在这里测试一下: http://www.sqlfiddle.com/#!9/9eecb7d/77760