2016-11-09 7 views
0
SELECT 
    XMLQUERY ('$x/test/xml[1]/data(@type)' PASSING XMLCOLUMN as "x") type, 
    XMLQUERY ('$x/test/xml[1]/text()' PASSING XMLCOLUMN as "x") text 
FROM 
    XML 

Я хочу выбрать все дочерние узлы родительского узла. Я имею в виду, о чем-то похож на это:xQuery Array [*]?

SELECT 
    XMLQUERY ('$x/test/xml[*]/data(@type)' PASSING XMLCOLUMN as "x") type, 
    XMLQUERY ('$x/test/xml[*]/text()' PASSING XMLCOLUMN as "x") text 
FROM 
    XML 

редактировать: XML:

<test> 
    <xml type = 1>a</xml> 
    <xml type = 2>b</xml> 
    <xml type = 3>c</xml> 
    <xml type = 4>d</xml> 
    <xml type = 5>e</xml> 
    ... 
</test> 

ожидаемый результат:

type | text 
-----|----- 
1 | a 
2 | b 
3 | c 
4 | d 
... 
+0

Прямые дочерние узлы или все такое? Взгляните на http://stackoverflow.com/questions/5119655/xpath-to-get-all-child-nodes-elements-comments-and-text-without-parent, и если вы возвращаете несколько столбцов, я рекомендую XMLTABLE вместо этого –

+0

XMLQUERY ('$ x/xml [*]/child :: node()' PASSING XMLCOLUMN как «x») текст дает мне тот же результат –

+0

Каков ожидаемый результат? –

ответ

1

Попробуйте что-то вроде следующего, на основе XMLTABLE:

select t.* from x, 
     xmltable('$X/test/xml' 
      columns "type" int path 'data(@type)', 
        "text" varchar(10) path 'text()') as t 

Он должен вернуть таблицу с требуемыми значениями и структурой.