Читать XML (хранится в длинной переменной) через PL SQL - PullRequest
1 голос
/ 05 января 2012

Мы используем БД Oracle 11g2. У нас есть некоторое содержимое XML в столбце / переменной Long.

Может кто-нибудь помочь мне прочитать значение атрибута xml?

например.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE labels SYSTEM "label.dtd">
<labels _QUANTITY="1" _JOBNAME="LBL213685">
<label _FORMAT="XE_INSP_REQ_LBL.lwl">
<variable name= "L_DATE">04-JAN-2012</variable>
<variable name= "L_TIME">10:45:17</variable>
<variable name= "L_LPN">K01-4713BE</variable>
<variable name= "L_SUPPLIER">RECISION OIL, INC</variable>
</label>
</labels>

Мы хотим прочитать значение рядом с <variable name= "L_LPN">. Нужно вернуть K01-4713BE программно.

1 Ответ

2 голосов
/ 05 января 2012

Попробуйте это:

declare
  v_parser Xmlparser.Parser;
  v_doc    XMLDOM.DOMDocument;
  v_nl     XMLDOM.DOMNodeList;
  v_node   XMLDOM.DOMNode;

  v_your_xml LONG := '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' ||
                    /*'<!DOCTYPE labels SYSTEM "label.dtd">*/
                     '<labels _QUANTITY="1" _JOBNAME="LBL213685">' ||
                     '<label _FORMAT="XE_INSP_REQ_LBL.lwl">' ||
                     '<variable name= "L_DATE">04-JAN-2012</variable>' ||
                     '<variable name= "L_TIME">10:45:17</variable>' ||
                     '<variable name= "L_LPN">K01-4713BE</variable>' ||
                     '<variable name= "L_SUPPLIER">RECISION OIL, INC</variable>' ||
                     '</label></labels>';

begin

  v_parser := Xmlparser.newParser;
  xmlparser.setValidationMode(v_parser, TRUE);

  Xmlparser.parseBuffer(v_parser, v_your_xml);

  v_doc := Xmlparser.getDocument(v_parser);

  v_nl   := xslprocessor.selectNodes(XMLDOM.makeNode(v_doc),
                                     '/labels/label/variable[@name="L_LPN"]');
  v_node := XMLDOM.getFirstChild(XMLDOM.item(v_nl, 0));

  dbms_output.put_line(XMLDOM.getNodeValue(v_node));

end;

обратите внимание, что функция xslprocessor.selectNodes получает селектор XPath, поэтому вы можете выбрать все, что захотите

...