запрос для извлечения значений из XML

0

У меня есть xml, хранящийся в db, вы хотите извлечь определенные части из них, например, после текста, полного запроса. В xml у меня есть много запросов и вы хотите их также извлечь. У нас есть какой-то метод для этого.

например: извлечь запрос не значение, xml встроен в db и имеет формат, как показано ниже. текст = "Query1" текст = "Query2" text = "query3"

  • 0
    Я понятия не имею, что вы пытаетесь спросить.
  • 0
    Какую СУБД вы используете? MySQL или Oracle? Оракулам принадлежат оба, но они все же совсем другие :)
Теги:

1 ответ

0

Вам нужно пойти на некоторые исследования использования Oracle XMLTYPE, но вот быстрая функция из пакета, в котором я сейчас работаю, показывает использование .existsnode для проверки наличия node и .extract to вытащить информацию

FUNCTION parse_order_by_xml (p_xml_document IN XMLTYPE) RETURN varchar2
   IS
        /*** xml document structure *** start
        <?xml version="1.0"?>
        <OrderByClause>
            <OrderBy>
                <ColumnName>ELECTOR_ID</ColumnName>
                <Order>Asc</Order>
            </OrderBy>
            <OrderBy>
                <ColumnName>CREATED_TS</ColumnName>
                <Order>Desc</Order>
            </OrderBy>
        </OrderByClause>
        *** xml document structure *** end ***/
        l_order_by_string varchar2(3000) := 'ORDER BY ';
        l_index number;
   BEGIN
        l_index := 1;
        WHILE (p_xml_document.existsnode('/OrderByClause/OrderBy[' || to_char(l_index) || ']') = 1) LOOP
            l_order_by_string :=        l_order_by_string
                                    ||  p_xml_document.extract('/OrderByClause/OrderBy[' || to_char(l_index) || ']/ColumnName/text()').getStringVal()
                                    ||  ' '
                                    ||  p_xml_document.extract('/OrderByClause/OrderBy[' || to_char(l_index) || ']/Order/text()').getStringVal()
                                    ||  ',';
            l_index := l_index + 1;
        END LOOP;

        l_order_by_string := REGEXP_REPLACE(l_order_by_string, ',$');

        RETURN l_order_by_string;
   END parse_order_by_xml;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню