从表数据生成xml - oracle 12c

时间:2017-04-07 14:45:16

标签: xml oracle

如何在xml下面生成。 我的要求是ProductionData的自我关闭标记。

必需的输出 -

<Header>
     <MeterUnit sno="1"    meterid="121">
         <ProductionData   manufacture="abc"/>
     </MeterUnit>
</Header>

Table Details:
Tablename: meterinfo.
Columnname: sno, meterid, manufacture.
Data:1 121 abc

我的查询 -

select xmlelement("Header",
        xmlelement("MeterUnit",xmlattributes(sno as sno, meterid as meterid),xmlelement("ProductionData",xmlattributes(manufacture as manufacture))))
             from meterinfo;

我的输出

<Header>
    <MeterUnit sno="1" meterid="121">
        <ProductionData   manufacture="abc"></ProductionData>
    </MeterUnit>
</Header>

2 个答案:

答案 0 :(得分:1)

不要使用XMLRoot,它是作为占位符引入的,而XMLSerialize()函数正在标准化。 您似乎想要添加xml声明。这是XML序列化的一个功能,应该使用XMLSerialize()添加,它将XML对象转换为文本..

答案 1 :(得分:0)

在@MarkDrake sugegsted时,您可以使用XMLSerialize()代替XMLRoot(),例如:

select xmlserialize(document xmlelement("Header",
  xmlelement("MeterUnit", xmlattributes(sno as sno, meterid as meterid),
    xmlelement("ProductionData", xmlattributes(manufacture as manufacture)))
) indent size=2)
from meterinfo;

XMLSERIALIZE(DOCUMENTXMLELEMENT("HEADER",XMLELEMENT("METERUNIT",XMLATTRIBUTES(SN
--------------------------------------------------------------------------------
<Header>
  <MeterUnit SNO="1" METERID="121">
    <ProductionData MANUFACTURE="abc"/>
  </MeterUnit>
</Header>

select xmlserialize(document xmlelement("Header",
  xmlelement("MeterUnit", xmlattributes(sno as sno, meterid as meterid),
    xmlelement("ProductionData", xmlattributes(manufacture as manufacture)))
) version '1.0')
from meterinfo;

XMLSERIALIZE(DOCUMENTXMLELEMENT("HEADER",XMLELEMENT("METERUNIT",XMLATTRIBUTES(SN
--------------------------------------------------------------------------------
<?xml version="1.0"?>
<Header>
  <MeterUnit SNO="1" METERID="121">
    <ProductionData MANUFACTURE="abc"/>
  </MeterUnit>
</Header>

您可能还想了解有关将关系数据转换为XML in the documentation的其他方法的更多信息。