oracle 11g PLSQL 将 xml 文档作为子文档附加到另一个 xml 文档

oracle 11g PLSQL append xml document as child to another xml document

几天来,我一直在努力寻找解决问题的方法,但到目前为止还没有成功。 也许有人可以帮助我。 这是我的一段代码

doc DBMS_XMLDOM.DOMDocument;
doc := DBMS_XMLDOM.newDOMDocument;
DBMS_XMLDOM.setVersion(doc, '1.0');
DBMS_XMLDOM.setcharset(doc, 'ISO-8859-15');
root := DBMS_XMLDOM.makeNode(doc);
root := DBMS_XMLDOM.appendChild(root, DBMS_XMLDOM.makeNode(DBMS_XMLDOM.createElement(doc, 'toto')));

以上都有效。 以下代码片段适用于 Oracle 9g 但不适用于 11g,我正在尝试找到能够使其工作的解决方案:

 xml := XMLTYPE.EXTRACT(lr.FIELD_XML, '/description/test');//from a table
 childDoc := DBMS_XMLDOM.newDOMDocument(xml);
 childRoot := DBMS_XMLDOM.makeNode(DBMS_XMLDOM.getDocumentElement(childDoc));
 node := DBMS_XMLDOM.appendChild(productNode, childRoot); --it fails here 

我在 Internet 上查找但失败了,因为我无法将 xml 文档附加到另一个 xml 文档。 我应该替换 appendChild 但我不知道如何替换 .

所以,这是我的问题:任何人都知道如何解决这个问题。

非常感谢。

C.C.

XMLTYPE.EXTRACT(lr.FIELD_XML, '/description/test') 来自其他文档,不是文档 DBMS_XMLDOM.DOMDocument 的一部分。您必须先将 xml 导入到您的 dom 结构中,然后再附加它。

declare 
  doc DBMS_XMLDOM.DOMDocument;
  root dbms_xmldom.DOMNode;
  toto_node dbms_xmldom.DOMNode;
  v_xml xmltype := xmltype('<a><b>bbbb</b><c>ccccc</c></a>') ;
  childDoc  DBMS_XMLDOM.DOMDocument;
  childDocElement   DBMS_XMLDOM.DOMELEMENT;
begin 
doc := DBMS_XMLDOM.newDOMDocument;

DBMS_XMLDOM.setVersion(doc, '1.0');
DBMS_XMLDOM.setcharset(doc, 'ISO-8859-15');
root := DBMS_XMLDOM.makeNode(doc);
toto_node := DBMS_XMLDOM.appendChild(root, DBMS_XMLDOM.makeNode(DBMS_XMLDOM.createElement(doc, 'toto1')));
childDoc  := DBMS_XMLDOM.NEWDOMDOCUMENT(v_xml);
childDocElement      := DBMS_XMLDOM.getDocumentElement(childDoc);
childDocElement      := DBMS_XMLDOM.makeElement(DBMS_XMLDOM.importNode(doc,DBMS_XMLDOM.makeNode(childDocElement),TRUE));

root := DBMS_XMLDOM.appendChild(toto_node,DBMS_XMLDOM.makeNode(childDocElement));
dbms_output.put_line(DBMS_XMLDOM.GETXMLTYPE(doc).getClobVal());
end;