Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как получить значение тэга xml с помощью dbms_xmldom  [new]
Димитрий85
Member

Откуда:
Сообщений: 84
Функции передается тип varchar2 длиной не более 32000 вида :
<?xml version="1.0"?>
  <xmlparams>
      <paramgroup id="10000000000000109819">
         <value>Testvalue</value>
         <value_refid>-1</value_refid>
      </paramgroup>
      <paramgroup id="-2">
         <value>illegaltestvalue</value>
         <value_refid>-1</value_refid>
      </paramgroup>
      <paramgroup id="-3">
         <value>illegaltestvalue2</value>
         <value_refid>-1</value_refid>
      </paramgroup>
  </xmlparams>
нужно вытащить значения между тегами value и value_refid.
Пытаюсь сделать это так:
create or replace procedure pReadXMLPar(vXmlPar varchar2) is
  domBatch         dbms_xmldom.DOMDocument;
  nl               DBMS_XMLDOM.DOMNodeList;
  n                DBMS_XMLDOM.DOMNode;
  e                DBMS_XMLDOM.DOMElement;
begin
  domBatch := dbms_xmldom.newDOMDocument(XMLType(vXmlPar));
  nl       := DBMS_XMLDOM.getElementsByTagName(domBatch, '*');
  for j in 0 .. DBMS_XMLDOM.getLength(nl) - 1 loop
    dbms_output.put_line('');
    n := DBMS_XMLDOM.item(nl, j);
    e := DBMS_XMLDOM.makeElement(n);
    dbms_output.put_line('getTagName: ' || DBMS_XMLDOM.getTagName(e));
    dbms_output.put_line('getNamespace: ' || DBMS_XMLDOM.getNamespace(e));
    dbms_output.put_line('getAttribute: ' || DBMS_XMLDOM.getAttribute(e, 'id'));
    dbms_output.put_line('getNodeValue: ' || DBMS_XMLDOM.getNodeValue(n));
    dbms_output.put_line('getNodeName: ' || DBMS_XMLDOM.getNodeName(n));
  end loop;
  dbms_xmldom.freeDocument(domBatch);
exception
  when others then
    dbms_output.put_line(sqlerrm);
end;
Получаю:
 

getTagName: xmlparams
getNamespace: 
getAttribute: 
getNodeValue: 
getNodeName: xmlparams
 
getTagName: paramgroup
getNamespace: 
getAttribute: 10000000000000109819
getNodeValue: 
getNodeName: paramgroup
 
getTagName: value
getNamespace: 
getAttribute: 
getNodeValue: 
getNodeName: value
....
Как вытащить значения тэгов "Testvalue" из данной структуры. Может быть стоит отказаться от DBMS_XMLDOM и использовать другие возможности?
Спасибо.

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
28 сен 10, 10:47    [9512364]     Ответить | Цитировать Сообщить модератору
 Re: Как получить значение тэга xml с помощью dbms_xmldom  [new]
Димитрий85
Member

Откуда:
Сообщений: 84
Разобрался. writeToBuffer() мне помогла.
28 сен 10, 11:23    [9512747]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить