2009-12-02 3 views
2

Я пытаюсь собрать XML-документ из нескольких частей. Чтобы получить данные, у меня было несколько запросов, результаты которых были XMLTypes.pl/sql: преобразование xmltype в узел

Я нашел функцию с именем getNodeFromFragment в пакете xmldom, которая выглядела так, как будто она может принимать эти 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?

ответ

3

Привет FrustratedWithFormsDesigner,

следующее создаст объект DOMNode из XMLType:

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> 
+0

яй! Это работает! Хотя теперь мне нужно объединить этот документ с существующим документом. Попытка дает мне, что «узлы DOM не принадлежат к одному документу DOM». – FrustratedWithFormsDesigner