简体   繁体   English

合并XML中的节点(Oracle)

[英]Merge nodes in XML (Oracle)

I wrote this query: 我写了这个查询:

WITH Cities 
AS(
    SELECT DISTINCT EXTRACTVALUE(Address,'(//City)[1]') AS City
    FROM Reader
)
SELECT XMLAGG(XMLELEMENT("Cities", 
XMLATTRIBUTES(c.City AS "Title"),
XMLELEMENT("Readers",
XMLELEMENT("Reader",XMLATTRIBUTES(r.FirstName,r.SecondName)))))
FROM Reader r,Cities c
WHERE EXTRACTVALUE(r.Address,'(//City)[1]') = c.City;

It generates the document: 它生成文档:

<Cities Title="New York">
    <Readers>
        <Reader FIRSTNAME="JON" SECONDNAME="SHOW"></Reader>
    </Readers>
</Cities>
<Cities Title="New York">
    <Readers>
        <Reader FIRSTNAME="Poll" SECONDNAME="Aeron"></Reader>
    </Readers>
</Cities>
<Cities Title="Kharkiv">
    <Readers>
        <Reader FIRSTNAME="Slavik" SECONDNAME="Romanov"></Reader>
    </Readers>
</Cities>
<Cities Title="Boca Juniors">
    <Readers>
        <Reader FIRSTNAME="Julio " SECONDNAME="Pedro"></Reader>
    </Readers>
</Cities>
<Cities Title="London">
    <Readers>
        <Reader FIRSTNAME="Johnny " SECONDNAME="Smith"></Reader>
    </Readers>
</Cities>

I would like to combine nodos with the same attributes ("New York"), exactly, the result was so: 我想将nodos与相同的属性(“纽约”)结合起来,确切地说,结果如此:

<Cities>
<!-- -->
  <City Title="New York">
    <Readers>
      <Reader FirstName="JON" SecondName="SHOW" />
      <Reader FirstName="Poll" SecondName="Aeron" />
    </Readers>
  </City>
</Cities>

Data for this sql query: http://sqlfiddle.com/#!4/2d231 此SQL查询的数据: http//sqlfiddle.com/#!4/2d231

This should do the trick: 这应该做的伎俩:

SELECT xmlagg(xmlelement("Cities",  xmlattributes(c.city as "Title"),
              xmlelement("Readers", xmlagg(xmlelement("Reader", xmlattributes(r.firstname,r.secondname)))))) cities_xml
from   reader r,
       xmltable('/Address'
                passing r.address
                columns city varchar2(20) path 'City[1]') c
group by c.city;

<Cities Title="Boca Juniors">
  <Readers>
    <Reader FIRSTNAME="Julio " SECONDNAME="Pedro"></Reader>
  </Readers>
</Cities>
<Cities Title="Kharkiv">
  <Readers>
    <Reader FIRSTNAME="Slavik" SECONDNAME="Romanov"></Reader>
  </Readers>
</Cities>
<Cities Title="London">
  <Readers>
    <Reader FIRSTNAME="Johnny " SECONDNAME="Smith"></Reader>
  </Readers>
</Cities>
<Cities Title="New York">
  <Readers>
    <Reader FIRSTNAME="JON" SECONDNAME="SHOW"></Reader>
    <Reader FIRSTNAME="Poll" SECONDNAME="Aeron"></Reader>
  </Readers>
</Cities>

Btw, I've swapped your EXTRACTVALUE for XMLTABLE , as both EXTRACT and EXTRACTVALUE are deprecated in 10g and above. 顺便说一句,我已经将你的EXTRACTVALUE交换为XMLTABLE ,因为EXTRACT和EXTRACTVALUE都在10g及以上的版本中被弃用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM