2012-06-19 8 views
1

У меня есть данные типа XML, хранящиеся в базе данных Oracle 11g. Схематичный вариант моих данных будет выглядеть следующим образом: функции манипуляцииOracle 11g: Извлечение и подсчет элементов XML

<?xml version="1.0" encoding="UTF-8"?> 
<record> 
<record_number>12345</record_number> 
<record_type> book </record_type> 
</record> 

данных, такие как:

SELECT XML_Type FROM Metadata 

указать столбец, где каждая строка содержит корректный файл XML (с большим количеством тегов и элементов). Я изо всех сил стараюсь извлечь и подсчитать количество вхождений для каждого элемента <record_type>. Например, я хотел бы знать, сколько раз XML-тег <record_type> имеет элемент «книга», «статья» и т. Д. Однако я не знаю весь список элементов, связанных с тегом.

Спасибо,

I.

ответ

3

В зависимости от того, как именно сохраняются данные (т.е. у вас есть 1 строка в таблице 1 XML документ, который выглядит как образец вы публикуемую или у вас есть 1 строка в таблице, которая является 1 XML документом, который имеет много различных записей тегов в нем) простейших подхода является то, что-то вроде

SQL> ed 
Wrote file afiedt.buf 

    1 with t as (select '<?xml version="1.0" encoding="UTF-8"?> 
    2      <record> 
    3      <record_number>12345</record_number> 
    4      <record_type> book </record_type> 
    5      </record>' xml 
    6    from dual 
    7    union all 
    8    select '<?xml version="1.0" encoding="UTF-8"?> 
    9      <record> 
10       <record_number>6789</record_number> 
11       <record_type> magazine </record_type> 
12      </record>' xml 
13     from dual) 
14 select xmltype(t.xml).extract('//record_number/text()') record_number, 
15   xmltype(t.xml).extract('//record_type/text()') record_type 
16* from t 
SQL>/

RECORD_NUMBER  RECORD_TYPE 
-------------------- ------------------------------ 
12345     book 
6789     magazine 

После того, как вы извлекли данные, она должна быть достаточно легко подсчитать или иначе агрегат данные.

+0

Justin, спасибо за ваш ответ, к сожалению, я, кажется, не обнимаю его. Данные хранятся под столбцом «Тип XML» (из таблицы «Метаданные»), и каждая строка представляет собой довольно продуманный XML-файл метаданных (да, несколько тегов записи). Не могли бы вы добавить дополнительные сведения о том, что на самом деле делает ваш код? Благодарю вас, извиняюсь за мои несуществующие знания XQuery ... – paranza

Смежные вопросы