详解如何将关系型数据发布为XML

日期: 2011-05-16 作者:Jeff McCormick翻译:冯昀晖 来源:TechTarget中国 英文

接上文:如何把Oracle XML数据分解为关系型表   把关系型数据发布为XML   我们用例的最终需求是抽取并从关系表生成XML数据。 点击查看本系列文章第一部分   抽取是通过使用XMLType视图实现的,本质上是物化为SQL执行的一个存储查询结果。XMLType视图允许文档为中心的应用程序把底层的关系结构查询为虚拟的XML文档。要生成XML数据,你有几种选择。

一种常用的方法是使用对象类型,对象视图和Oracle SQL函数“sys_XMLGen”。我更喜欢使用SQL/XML结构(见列表7),或者结合XMLTable使用XQuery,或者单独使用XMLQuery,或者两者兼而有之。这些方……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

接上文:如何把Oracle XML数据分解为关系型表

  把关系型数据发布为XML

  我们用例的最终需求是抽取并从关系表生成XML数据。

点击查看本系列文章第一部分

  抽取是通过使用XMLType视图实现的,本质上是物化为SQL执行的一个存储查询结果。XMLType视图允许文档为中心的应用程序把底层的关系结构查询为虚拟的XML文档。要生成XML数据,你有几种选择。一种常用的方法是使用对象类型,对象视图和Oracle SQL函数“sys_XMLGen”。我更喜欢使用SQL/XML结构(见列表7),或者结合XMLTable使用XQuery,或者单独使用XMLQuery,或者两者兼而有之。这些方法都支持我显示带有最优执行路径的查询计划。

  列表7:创建XMLType视图。

    create or replace view abc_purchase_order_xml_view of XMLType
with OBJECT ID (XMLCast(XMLQuery('/PurchaseOrder/OrderNumber'Passing OBJECT_VALUE Returning Content)as BINARY_DOUBLE))
as
Select XMLElement(NOENTITYESCAPING "PurchaseOrder"
                 ,XMLForest(po.order_number         as "OrderNumber"
                           ,po.order_date           as "OrderDate"
                           ,po.customer_name        as "CustomerName"
                           ,po.userid               as "User"
                           ,po.special_instructions as "SpecialInstructions"
                           )
                 ,XMLElement(NOENTITYESCAPING "LineItems"
                            ,(SELECT XMLAgg(XMLElement(NOENTITYESCAPING "LineItem"
                                                      ,XMLAttributes(NOENTITYESCAPING li.itemno  as "ItemNumber")
                                                      ,XMLElement(NOENTITYESCAPING "Description", li.description)
                                                      ,XMLElement(NOENTITYESCAPING "Part"
                                                                 ,XMLAttributes(li.partno    as "Id"
                                                                               ,li.unitprice as "UnitPrice"
                                                                               ,li.quantity  as "Quantity" 
                                                                               )
                                                                 )
                                                      )
                                           )
                                from abc_lineitem_table li
                                where li.order_number = po.order_number
                             )
                            )
                 )
  as "POXML"
  from abc_purchase_order_table po;

  现在,是时候生成我们的XML数据了(列表8)。为了供XML应用程序所用,我们可以把XML数据发布为未经格式化的字符串。在你需要结构化输出的时候,“XMLSerialize ”函数可以把XML以适合查看或者打印的格式展现出来。请注意,在我们的例子中,“XMLSerialize ”函数已经把结束标记“Part”元素格式化为“/>”,而不是“”。这两种都被认为是格式良好的XML,因此没有任何技术方面的差异。

  列表8:生成XML数据。

    -- Unformatted
 
select OBJECT_VALUE as "Purchase Order" from abc_purchase_order_xml_view;
 
Purchase Order
<PurchaseOrder><OrderNumber>11111</OrderNumber><OrderDate>2010-01-15</OrderDate><CustomerName>Joe Smith</CustomerName>
<User>JSMIT</User><SpecialInstructions>Air Mail</SpecialInstructions><LineItems><LineItem ItemNumber="1">
<Description>Bubble Gum</Description><Part Id="7155" UnitPrice="19.95" Quantity="5"></Part></LineItem>
<LineItem ItemNumber="2"><Description>Blow Pops</Description><Part Id="3742" UnitPrice="15.95" Quantity="2">
</Part></LineItem></LineItems></PurchaseOrder>
 
-- Formatted
 
select XMLSerialize(Content OBJECT_VALUE as CLOB indent) as "Purchase Order"
  from abc_purchase_order_xml_view;
 
Purchase Order
-----------------------------------------------------
<PurchaseOrder>
  <OrderNumber>11111</OrderNumber>
  <OrderDate>2010-01-15</OrderDate>
  <CustomerName>Joe Smith</CustomerName>
  <User>JSMIT</User>
  <SpecialInstructions>Air Mail</SpecialInstructions>
  <LineItems>
    <LineItem ItemNumber="1">
      <Description>Bubble Gum</Description>
      <Part Id="7155" UnitPrice="19.95" Quantity="5"/>
    </LineItem>
    <LineItem ItemNumber="2">
      <Description>Blow Pops</Description>
      <Part Id="3742" UnitPrice="15.95" Quantity="2"/>
    </LineItem>
  </LineItems>
</PurchaseOrder>

相关推荐