парсинг xml-кода и перенаправление в таблицу / файл - PullRequest
1 голос
/ 08 июля 2011

Ниже приведен пример XML-кода, хранящегося в столбце Oracle

<productAttribute> 
    <name>Baiying_attr_03</name> 
    <required>false</required> 
</productAttribute> 
<productAttribute> 
    <name>Baiying_attr_04</name> 
    <required>false</required> 
</productAttribute>
<productAttribute> 
    <name>Baiying_attr_05</name> 
    <required>false</required> 
</productAttribute>

Я хочу проанализировать этот XML-код и буферизовать данные в файле как узел за узлом, что-то вроде

Ожидаемый выход

Baiying_attr_03,false 
Baiying_attr_04,false 
Baiying_attr_05,false

На самом деле я получаю как

Baiying_attr_03falseBaiying_attr_04falseBaiying_attr_05false

Я пытался получить данные в курсоре, но я получаю все эти данные в одной транзакции, поэтому не могу разделить.Если я хочу получить вывод, как показано ниже, то что я должен использовать

Ниже был мой код

SET serveroutput ON;
DECLARE
    data_text VARCHAR2(32765);
    CURSOR c1 IS  
    SELECT XMLTYPE(XMLDATA).EXTRACT('//productAttribute/text()').getStringVal() 
    FROM TABLE;
BEGIN
    OPEN c1;
    LOOP
        FETCH c1 INTO data_text;  
        EXIT WHEN c1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(data_text);
    END LOOP;
    CLOSE c1; 
END;
/

1 Ответ

1 голос
/ 22 декабря 2011

Это ближе к желаемому результату?

/* 
NAME                           REQUIRED                      
------------------------------ ------------------------------
Baiying_attr_03                false                         
Baiying_attr_04                false                         
Baiying_attr_05                false                         

3 rows selected.

*** Note: I added ROWSET tags around your XML Code *** */

   select lines.*
    from (select xmltype(
          '<ROWSET><productAttribute><name>Baiying_attr_03</name><required>false</required> </productAttribute> <productAttribute> <name>Baiying_attr_04</name> <required>false</required> </productAttribute> <productAttribute> <name>Baiying_attr_05</name> <required>false</required> </productAttribute></ROWSET>') as the_xml
  from dual) zz,
         xmltable('for $i in /ROWSET/productAttribute
                 return $i' PASSING 
                   zz.the_xml  COLUMNS name varchar2(30) PATH 'name', required varchar2(30) PATH 'required') lines;                                             
...