﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Oracle / Базы данных  / Xpath - можно ли узнать кол-во нод? / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://www.relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Fri, 05 Sep 2008 17:10:28 GMT</lastBuildDate><ttl>20</ttl><item><title>Xpath - можно ли узнать кол-во нод?</title><link>http://www.relib.com/forums/Topic915873-21-1.aspx</link><description>Имеем в переменной l_clob -  текст в xml структуре.&lt;P&gt;Нужно подсчитать кол-во нод (l_nodecnt)  по такому пути:  /header/filename&lt;/P&gt;&lt;P&gt;1. Если делать через XMLDOM:&lt;/P&gt;&lt;FONT size=2&gt;&lt;P&gt;[quote]&lt;/P&gt;&lt;FONT size=2&gt;&lt;P&gt;l_doc       dbms_xmldom&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;DOMDocument&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT color=#0000f0 size=2&gt;l_nodelst   &lt;FONT size=2&gt;bms_xmldom&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;DOMNodeList&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;l_doc         &lt;FONT color=#0000f0 size=2&gt;:=&lt;/FONT&gt;&lt;FONT size=2&gt; dbms_xmldom&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;newDOMDocument&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;(l_clob&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT color=#0000f0 size=2&gt;&lt;FONT color=#1f5080&gt;&lt;FONT color=#0000f0&gt;l_nodelst   &lt;/FONT&gt; &lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;:=&lt;/FONT&gt;&lt;FONT color=#1f5080 size=2&gt; dbms_xmldom&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#1f5080 size=2&gt;getElementsByTagName&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#1f5080 size=2&gt;dbms_xmldom&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;.&lt;/FONT&gt;&lt;FONT color=#1f5080 size=2&gt;getDocumentElement&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#1f5080 size=2&gt;doc&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;),&lt;/FONT&gt;&lt;FONT color=#1f5080 size=2&gt;   '/header/filename')&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;l_nodecnt   := dbms_xmldom&lt;FONT color=#0000f0 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;getLength&lt;/FONT&gt;&lt;FONT color=#0000f0 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000f0&gt;l_nodelst) ;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;[/quote]&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;P&gt;2.  А можно ли выполнить подсчет используя  xpath в цикле?  Ловя исключение на несуществующей ноде?&lt;/P&gt;&lt;P&gt;[quote]&lt;/P&gt;&lt;P&gt;for i in 0..N loop&lt;/P&gt;&lt;P&gt;    begin&lt;/P&gt;&lt;P&gt;      select xmltype(l_clob).extract('//header['||to_char(i)||']/filename/text()').getStringVal()  &lt;BR&gt;      from dual;&lt;/P&gt;&lt;P&gt;   exception when .....&lt;/P&gt;&lt;P&gt;   end;&lt;/P&gt;&lt;P&gt;end loop;&lt;BR&gt;[/quote]&lt;/P&gt;&lt;P&gt;&lt;/FONT&gt; Проблема в том, что любая ф-ция типа extract - возвращает пусто при несуществующей ноде. Есть ли альтернатива этому?</description><pubDate>Tue, 11 Sep 2007 16:18:30 GMT</pubDate><dc:creator>anny</dc:creator></item></channel></rss>