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