【问题标题】:Creating XML from database table从数据库表创建 XML
【发布时间】:2013-03-27 00:23:22
【问题描述】:

我有一个 XML 文件样本。现在我想用我拥有的 SQL 表数据生成一个原始 XML。

示例 XML 如下所示:

<?xml version="1.0"?>
<EmployeeSet  xmlns=" http://www.example.com/Employee.xsd " xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<DefaultDeptt xsi:nil="true"/> 
<Report>
    <Report  Title="Yearly" Number="S678"> 
        <Status>Current</Status> 
        <Deptt xsi:nil="true"/> 
        <Employee LastName="Name" FirstName="Simple" EMail="simple@organization.org" Login="simple"/> 
        <Location>Builiding 1</Location> 
        <SubmissionDate xsi:nil="true"/> 
        <ReportStartDate>2011-05-05</ReportStartDate> 
        <ReportFinishDate xsi:nil="true"/> 
        <ReportExpirationDate>2014-05-05</ReportExpirationDate> 
        <RenewalDate xsi:nil="true"/> 
        <Records> 
            <RecordsInfo Name="Paper"> 
            <UsageRecords AnnualUse="5o0" Purpose="printing"/> 
            </RecordInfo> 
        </Record> 
    <Staff/> 
</Report>

我从中获取数据的表具有以下结构:

  • 报告标题
  • 号码
  • 状态
  • 姓氏
  • 名字
  • 电子邮件
  • login_id
  • 位置
  • 提交日期
  • 开始日期
  • Finsih_date
  • 续订日期
  • 姓名
  • 每年使用一次
  • 目的

我试过了,我得到了关注:

<EmployeeSet xmlns="http://www.example.com/Employee.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <DefaultDeptt xsi:nil="true"></DefaultDeptt>        
    <report_title>TESTINGNEW</report_TITLE>      
    <NUMBER>AC10006</NUMBER>    
    <STATUS>Approved</STATUS>       
    <LAST_NAME>XYZ</LAST_NAME>       
    <FIRST_NAME>ABC</PI_FIRST_NAME>       
    <EMAIL>ABC.XYZ@gmail.com</EMAIL>       
    <LOGIN_ID>ABCXYZ</LOGIN_ID>       
    <LOCATION> </ LOCATION>       
                                                                                         <SUBMISSION_DATE>2013-03-25</SUBMISSION_DATE>                                                  <START_DATE>2013-03-25</START_DATE>           
    <FINISH_DATE>2013-03-25</FINISH_DATE>        
    <RENEWAL_DATE>2014-01-9</RENEWAL_DATE>        
    <NAME>PAPER</NAME>        
    <ANNUAL_USE>670</ANNUAL_USE>       
    <PURPOSE> PRINTING</PURPOSE>        
</EmployeeSet>

【问题讨论】:

  • 我正在尝试使用以下查询,但结果不一样:
    select XMLElement("EmployeeSet",XMLAttributes('http://www.abc.com.Employee.xsd' as "xmlns",'http://www.w3.org/2001/XMLSchema' as "xmlns:xsd", 'http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"), XMLElement("DefaultDeptt",XMLAttributes('true' as "xsi:nil")), XMLForest(title, number, status, last_name, first_name, email, login_id, location, submission_date, startdate, finishdate, renewaldate, name, annual_use, purpose)) as "XML" from xyz.emp_temp;
  • 我是使用 oracle 的 XML 新手。从教程中我学到的只是这些命令。
  • 你能发送一个包含 2 条表记录的示例 xml 文件吗?
  • 我已将我的 xml 输出添加到问题中。请看一下。

标签: plsql oracle10g xml-serialization xsd plsqldeveloper


【解决方案1】:

我认为这样的事情会有所帮助,试试 google for xmldom built in package in oracle

declare
           xml_content CLOB:=null;  
           doc xmldom.domdocument;  
           main_node xmldom.DOMNode;                                                                           
           root_node xmldom.DOMNode;                                                                           
           root_elmt xmldom.DOMElement;                                                                         
           transmissionHeaderNode xmldom.DOMNode;                                                              
           transmissionHeaderElement xmldom.DOMElement;                                                               
           item_node xmldom.DOMNode;
           item_elmt xmldom.DOMElement;
           item_text xmldom.DOMText;
           redx_elmt xmldom.DOMElement;
begin
            --some cursor
            for c1 in (
                        select * from (yourtable)
                       )
            loop
-- here you loop all you're fetches from table
              doc := xmldom.newdomdocument;                                                                       
              main_node := xmldom.makenode(doc);                                                                  
              xmldom.setversion(doc,'1.0');            
              dbms_xmldom.setcharset(doc, 'UTF-8'); -- UTF-8
              root_elmt := xmldom.createelement(doc, 'Some header')
              root_node := xmldom.appendchild( main_node, xmldom.makenode(root_elmt));               
              transmissionheaderelement := xmldom.createelement(doc, 'XML_DOCUMENT');
              transmissionheadernode := xmldom.appendchild(root_node, xmldom.makenode(transmissionheaderelement));
        -- lets say in cursor you have location field
              item_elmt := xmldom.createelement(doc, 'Location'); 
              item_node := xmldom.appendchild(transmissionheadernode, xmldom.makenode(item_elmt));                
              item_text := xmldom.createTextNode(doc, c1.Location);                             
              item_node := xmldom.appendchild(item_node, xmldom.makenode(item_text));
            .
            .
            .
            -- before end of loop
               dbms_lob.createtemporary(xml_content, true, dbms_lob.call);
               xmldom.writetoclob(doc, xml_content);               
               xmldom.freedocument(doc);             


   end loop;

【讨论】:

  • 嗨 Vedran 我尝试使用上面指定的代码。但我的 pl-sql 开发人员不支持此代码
  • 请给我一份支持 dbms_xmldom 的软件列表。我已经准备了一个程序来生成我的 xml
  • 试试这个链接来解决 xmldom 也许你没有在你的 O11g 中安装 DBMS_XMLDOM forums.oracle.com/forums/thread.jspa?threadID=353424
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多