如何使用DBMS_XMLDOM在XML中定义命名空间

时间:2015-12-09 12:32:11

标签: xml oracle plsql

我正在尝试使用函数生成以下格式xml:

XML

<?xml version="1.0" encoding="UTF-8"?>
<OUTPUT xmlns:xsi="http://www.w3.org">
 ....

功能:

FUNCTION f_get_details(
    p_employee_id NUMBER)
  RETURN XMLTYPE
IS
  v_xmltype xmltype;  
  --  
  main_node xmldom.DOMnode;
  ROOT_NODE XMLDOM.DOMNODE;  
  root_elmt xmldom.domelement;
  l_con_node dbms_xmldom.DOMnode;
  -- 
BEGIN
  l_domdoc := xmldom.newDomDocument; 
  --
  main_node := xmldom.makenode(l_domdoc);
  root_elmt := xmldom.createelement(l_domdoc, 'OUTPUT');
  --
  xmldom.setattribute(elem => root_elmt, name=> 'xmlns:xsi', newvalue=>'http://www.w3.org');
  --
  v_xmltype := dbms_xmldom.getXMLType(l_domdoc);
  dbms_xmldom.freeDocument(l_domdoc); 
  return v_xmltype;
END f_get_details;

函数以正确的格式生成xml但我无法提及输出节点的命名空间。我应该怎么解决呢? 我在这行代码中给出了命名空间:

 xmldom.setattribute(elem => root_elmt, name=> 'xmlns:xsi', newvalue=>'http://www.w3.org');

1 个答案:

答案 0 :(得分:0)

回答我自己未回答的问题,因为我自己解决了这个问题。希望有人会觉得有用。下面的函数现在将添加XML命名空间。

FUNCTION f_get_details(
    p_employee_id NUMBER)
  RETURN XMLTYPE
IS
  v_xmltype xmltype;  
  --  
  main_node xmldom.DOMnode;
  ROOT_NODE XMLDOM.DOMNODE;  
  r_elmt xmldom.domelement;
  l_con_node dbms_xmldom.DOMnode;
  -- 
BEGIN
 --Create an empty XML document
  l_domdoc := xmldom.newDomDocument; 
  --
 --XML declaration
  dbms_xmldom.setVersion(l_domdoc, '1.0" encoding="UTF-8');
  dbms_xmldom.setCharset(l_domdoc,'UTF-8');
 --set root node
  r_elmt := xmldom.createelement(l_domdoc, 'test');
  dbms_xmldom.setattribute(r_elmt,'xmlns:xsi','http://www.test.com');
  l_node := dbms_xmldom.appendChild(xmldom.makenode(l_domdoc), dbms_xmldom.makeNode(r_elmt));

  --
  v_xmltype := dbms_xmldom.getXMLType(l_domdoc);
  dbms_xmldom.freeDocument(l_domdoc); 
  /*
  * Rest of coding. 
  */
  return v_xmltype;
END f_get_details;
/