powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите разобраться с DBMS_XMLDOM.CLONENODE
2 сообщений из 2, страница 1 из 1
Помогите разобраться с DBMS_XMLDOM.CLONENODE
    #39259320
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
set serverout on
declare
        xml     DBMS_XMLDOM.DOMNode := dbms_xmldom.makeNode(DBMS_XMLDOM.newdomdocument(
        '<body>
          <tbl><tr>1</tr></tbl>
          <tbl><tr>2</tr></tbl>
         </body>'));
        body       DBMS_XMLDOM.DOMNode := dbms_xmldom.item(dbms_xslprocessor.selectNodes(xml,'/*[name()="body"]'),0);
        inbody     DBMS_XMLDOM.domnodelist := DBMS_XMLDOM.GETCHILDNODES(body);
        type       domnode is record (node DBMS_XMLDOM.DOMNode);
        type       domnodelist is table of domnode index by binary_integer;
        body_nodes domnodelist;
        v_cnt      number;
begin
        for index_inbody in 0..DBMS_XMLDOM.getlength (inbody)-1 loop
                body_nodes(index_inbody).node := DBMS_XMLDOM.CLONENODE(dbms_xmldom.item(inbody,index_inbody),true);
        end loop;
        for index_inbody in 0..DBMS_XMLDOM.getlength (inbody)-1 loop
                v_cnt := DBMS_XMLDOM.getlength(dbms_xslprocessor.selectNodes(dbms_xmldom.item(inbody,index_inbody),'//*[name()="tbl"]/*[name()="tr"]'));
dbms_output.put_line(v_cnt);
        end loop;
        for index_inbody in body_nodes.first..body_nodes.last loop
                v_cnt := DBMS_XMLDOM.getlength(dbms_xslprocessor.selectNodes(body_nodes(index_inbody).node,'//*[name()="tbl"]/*[name()="tr"]'));
dbms_output.put_line(v_cnt);
        end loop;
end;
/
show error



Выводит
2
2
0
0

Т.е. в клонированной ноде не желает искать по этому же пути. Почему?
...
Рейтинг: 0 / 0
Помогите разобраться с DBMS_XMLDOM.CLONENODE
    #39260066
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, дело в следующем.

dbms_xslprocessor.selectNodes по умолчанию ищет всегда от корня, независимо от того, какая нода указана.

Если нужно искать именно от указанной ноды, тогда в XPath нужно поставить первым символом точку. Но тогда текущая нода обрабатываться не будет.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите разобраться с DBMS_XMLDOM.CLONENODE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]