Oracle 11G通过XML进行多循环等于PL / SQL中的节点

时间:2017-04-19 22:09:06

标签: xml oracle oracle11g

我的XML看起来像这样。

 <mapaDatosUsuario>
           <item>
              <campo>pair1</campo>
              <valor>value1</valor>
           </item>
           <item>
              <campo>pair2</campo>
              <valor>value2</valor>
           </item>
           <item>
              <campo>pair3</campo>
              <valor>value3</valor>
           </item>
           <item>
              <campo>pair4</campo>
              <valor>value4</valor>
           </item>
           <item>
              <campo>pair5</campo>
              <valor>value5</valor>
           </item>
           <item>
              <campo>pair6</campo>
              <valor>value6</valor>
           </item>
           <item>
              <campo>pair7</campo>
              <valor>value7</valor>
           </item>
           <item>
              <campo>pair8</campo>
              <valor>value8</valor>
           </item>
           <item>
              <campo>pair9</campo>
              <valor>value9</valor>
           </item>
           <item>
              <campo>pair10</campo>
              <valor>value10</valor>
           </item>
           <item>
              <campo>pair11</campo>
              <valor>value11</valor>
           </item>
           <item>
              <campo>pair12</campo>
              <valor>value12</valor>
           </item>
        </mapaDatosUsuario>
        <mapaDatosUsuario>
           <item>
              <campo>pair1</campo>
              <valor>value1</valor>
           </item>
           <item>
              <campo>pair2</campo>
              <valor>value2</valor>
           </item>
           <item>
              <campo>pair3</campo>
              <valor>value3</valor>
           </item>
           <item>
              <campo>pair4</campo>
              <valor>value4</valor>
           </item>
           <item>
              <campo>pair5</campo>
              <valor>value5</valor>
           </item>
           <item>
              <campo>pair6</campo>
              <valor>value6</valor>
           </item>
           <item>
              <campo>pair7</campo>
              <valor>value7</valor>
           </item>
           <item>
              <campo>pair8</campo>
              <valor>value8</valor>
           </item>
           <item>
              <campo>pair9</campo>
              <valor>value9</valor>
           </item>
           <item>
              <campo>pair10</campo>
              <valor>value10</valor>
           </item>
           <item>
              <campo>pair11</campo>
              <valor>value11</valor>
           </item>
           <item>
              <campo>pair12</campo>
              <valor>value12</valor>
           </item>
        </mapaDatosUsuario>

我有一个表,我必须用列存储一些xml节点 pair1 pair3 pair5 pair6 pair7

但我只提取mapaDatosUsuario但我不知道如何提取剩下的值

我可以帮助我吗

提前致谢!!

1 个答案:

答案 0 :(得分:1)

SELECT *
FROM   XMLTABLE(
         '//root/mapaDatosUsuario'
         PASSING XMLTYPE( '<root>' || your_xml || '</root>' )
         COLUMNS pair1 VARCHAR2(100) PATH './item/campo[text()="pair1"]/../valor/text()',
                 pair3 VARCHAR2(100) PATH './item/campo[text()="pair3"]/../valor/text()',
                 pair5 VARCHAR2(100) PATH './item/campo[text()="pair5"]/../valor/text()',
                 pair7 VARCHAR2(100) PATH './item/campo[text()="pair7"]/../valor/text()'
       );

<强>输出

PAIR1      PAIR3      PAIR5      PAIR7    
---------- ---------- ---------- ----------
value1     value3     value5     value7    
value1     value3     value5     value7    

或者,获取XML节点:

SELECT *
FROM   XMLTABLE(
         '//root/mapaDatosUsuario'
         PASSING XMLTYPE( '<root>' || your_xml || '</root>' )
         COLUMNS pair1 XMLTYPE PATH './item/campo[text()="pair1"]/..',
                 pair3 XMLTYPE PATH './item/campo[text()="pair3"]/..',
                 pair5 XMLTYPE PATH './item/campo[text()="pair5"]/..',
                 pair7 XMLTYPE PATH './item/campo[text()="pair7"]/..'
       );