Oracle 11g PLSQL добавляет XML-документ как дочерний к другому XML-документу

Уже несколько дней пытаюсь найти решение своей проблемы, и пока безрезультатно. Может быть, кто-то может мне помочь. Вот кусок моего кода

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.


person CC.    schedule 16.02.2016    source источник
comment
Я могу помочь вам в этом. Пожалуйста, дайте мне образец документа xml   -  person Dinesh V    schedule 16.02.2016


Ответы (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; 
person Arkadiusz Łukasiewicz    schedule 16.02.2016