【问题标题】:oracle 11g PLSQL append xml document as child to another xml documentoracle 11g PLSQL 将 xml 文档作为子项附加到另一个 xml 文档
【发布时间】:2016-05-27 15:42:32
【问题描述】:

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

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.

【问题讨论】:

  • 我可以帮助你。请给我示例 xml 文档

标签: xml oracle plsql oracle11g xmldom


【解决方案1】:

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; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2011-12-19
    • 2016-10-05
    • 2023-02-02
    相关资源
    最近更新 更多