pl / sql:将xmltype转换为node

时间:2009-12-02 16:26:30

标签: xml oracle plsql xmldom

我正在尝试将多个XML文档放在一起。为了获取数据,我有几个查询,其结果是XMLTypes。

我在xmldom包中找到了一个名为getNodeFromFragment的函数,看起来它可以采用这些XMLTypes并返回包含它们的DOMNode,但它似乎不起作用。

这里有一个简单的例子:

set serveroutput on;
declare
    node xmldom.DOMNode;
    node2 xmldom.DOMNode;
    doc_node xmldom.DOMNode;
    doc xmldom.DOMDocument;
    el xmldom.DOMElement;
    buf varchar2(1000);
begin
    doc := xmldom.newDOMDocument;

    el := xmldom.createElement(doc => doc, tagName => 'test');
    node := xmldom.makeNode(elem => el);

    xmldom.writeToBuffer(node, buf);
    dbms_output.put_line('buffer: '||buf);

    node := dbms_xmldom.getNodeFromFragment(XMLType('<outer><inner>soemthing</inner><inner>somethingelse</inner></outer>'));

    xmldom.writeToBuffer(node, buf);
    dbms_output.put_line('buffer: '||buf);
end;

/

打印<test/>元素工作正常,但是当我尝试将片段打印为节点时,不会输出任何内容。

有关getNodeFromFragment的任何提示吗?

1 个答案:

答案 0 :(得分:3)

Hi FrustratedWithFormsDesigner,

以下将从XMLType创建一个DOMnode对象:

node := dbms_xmldom.makenode(dbms_xmldom.newDOMDocument(XMLType(
     '<outer><inner>soemthing</inner><inner>somethingelse</inner></outer>')));

这将输出:

buffer: <outer>
  <inner>soemthing</inner>
  <inner>somethingelse</inner>
</outer>