Oracle xml 轉換

來源:互聯網
上載者:User

   select * from pdpla_approve_proj;

  create or replace procedure proj_xml(st_id varchar2)

  is

  pro_rows pdpla_approve_proj%rowtype;--行遊標

  tempsql varchar2(100) :='select * from pdpla_approve_proj where st_id='''||st_id||'''';--

  type cur is ref cursor;--自訂遊標

  proj_cur cur ;--自訂遊標執行個體

  doc xmldom.DOMDocument := xmldom.newDOMDocument;--文檔對象

  doc_node xmldom.DOMNode := xmldom.makeNode(doc);--文檔節點

  root_ele xmldom.DOMElement := xmldom.createElement(doc,'root');--文檔根項目

  st_pro_ele xmldom.DOMElement;

  project_ele xmldom.DOMElement;

  st_pro_node xmldom.DOMNode;

  root_node xmldom.DOMNode;

  project_node xmldom.DOMNode;

  t_node xmldom.DOMNode;

  cnt number :=1;

  buf varchar2(1000);

  begin

  dbms_output.put_line('tempsql'||tempsql);

  root_node := xmldom.appendChild(doc_node,xmldom.makeNode(root_ele));

  xmldom.setAttribute(root_ele,'id',st_id);

  open proj_cur for tempsql;--開啟遊標

  loop

  fetch proj_cur into pro_rows;

  exit when proj_cur%notfound;

  project_ele := xmldom.createElement(doc,'project');

  project_node := xmldom.appendChild(root_node,xmldom.makeNode(project_ele));

  st_pro_ele := xmldom.createElement(doc,'st_pro_id');

  st_pro_node := xmldom.appendChild(project_node,xmldom.makeNode(st_pro_ele));

  t_node := xmldom.appendChild(st_pro_node,xmldom.makeNode(xmldom.createTextNode(doc,pro_rows.st_project_id)));

  st_pro_ele := xmldom.createElement(doc,'st_info_type');

  st_pro_node := xmldom.appendChild(project_node,xmldom.makeNode(st_pro_ele));

  t_node := xmldom.appendChild(st_pro_node,xmldom.makeNode(xmldom.createTextNode(doc,pro_rows.st_info_type)));

  cnt :=cnt+1;

  end loop;

  close proj_cur;

  xmldom.writeToBuffer(doc,buf);

  xmldom.freeDocument(doc);

  dbms_output.put_line('cnt'||cnt);

  dbms_output.put_line('doc'||buf);

  exception

  when others then

  dbms_output.put_line('sqlerrm'||sqlerrm);

  end;

  create or replace procedure p_parse (ID in varchar2) is--建立xml解析器執行個體xmlparser.ParserxmlPar xmlparser.Parser :=xmlparser.newParser;--定義DOM文檔xDoc xmldom.DOMDocument;--定義DATA子節點數目變數lenItme integer;--定義節點列表,存放DATA節點們itemNodes xmldom.DOMNodeList;--定義節點列表,存放DATA子節點們childNodes xmldom.DOMNodeList;--定義節點,存放單個DATA節點itemNode xmldom.DOMNode;--定義屬性變數,存放節點屬性itemArrMap xmldom.DOMNamedNodeMap;--定義其他變數,存放子節點的值name varchar(100);value varchar(100);newid NUMBER(10);--定義clob變數,存放xml字串para_namexmlStr clob;begin for cur in (select t.xml_data para_name ,t.id from xmldata t where t.id=ID ) --從xmldata表中查詢資料,id不是唯一標識,一個id可查出多條資料(XML中多條資料),故用loop迴圈 loop --擷取para_name中的xml字串 xmlStr:=cur.para_name; xmlPar :=xmlparser.newParser; --解析xmlStr中xml字串,並存放到xmlPar中 xmlparser.parseClob(xmlPar, xmlStr); --將xmlPar中的資料轉存到dom文檔中 xDoc:=xmlparser.getDocument(xmlPar); xmlparser.freeParser(xmlPar); --釋放解析器執行個體 --擷取所有DATA節點 itemNodes:=xmldom.getElementsByTagName(xDoc,'DATA'); --擷取DATA節點的個數 lenItme :=xmldom.getLength(itemNodes); --遍曆所有的DATA節點 for i in 0..lenItme-1 loop begin --擷取節點列表中的第i個DATA節點 itemNode:=xmldom.item(itemNodes,i); --擷取第i個DATA節點的所有子節點 childNodes:=xmldom.getChildNodes(itemNode); --擷取所有子節點的值 newid:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,0))); name:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,1))); value:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(childNodes,2))); --將子節點的值newid,name,value存放到xmltest insert into xmltest values(newid,name,value); commit; end; end loop; end loop; --是否dom文檔 xmldom.freeDocument(xDoc); --異常和錯誤處理 EXCEPTION WHEN OTHERS THEN DBMS_output.PUT_LINE(SQLERRM);end p_parse;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.