有几天我试图找到解决问题的办法,到目前为止还没有运气。 也许有人可以帮助我。 这是我的一段代码
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
我在互联网上查了一下它失败了,因为我无法将xml文档附加到另一个xml文档中。
我应该替换appendChild
,但我不知道如何。
所以,这是我的问题:任何人都知道如何解决这个问题。
非常感谢。
C.C。
答案 0 :(得分:1)
XMLTYPE.EXTRACT(lr.FIELD_XML,' / description / test')来自其他文档,不属于doc 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;