powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
7 сообщений из 7, страница 1 из 1
Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
    #37374490
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна помощь в оптимизации следующего XPath запроса: following::tag2/tag3[following::end/@id=1]

Пример для экспериментов:
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
<?php
    $xml = "<?xml version='1.0' encoding='UTF-8'?>
<test>
  <p>
    <tag2>
      <tag3>test2</tag3>
    </tag2>
  </p>
  <tag2>
    <tag3>test2</tag3>
  </tag2>
  <beg id='1'/>
  <p>
    <tag2>test2</tag2>
  </p>
  <tag2>
    <tag3>test2</tag3>
  </tag2>
  <p>
    <tag2>
      <tag3>test2</tag3>
    </tag2>
    <tag2>
      <tag3>test2</tag3>
    </tag2>
    <end id='1'/>
    <tag2>
      <tag3>test2</tag3>
    </tag2>
  </p>
  <beg id='2'/>
  <tag2>
    <tag3>test2</tag3>
  </tag2>
  <end id='2'/>
  <p />
</test>";
    $dom =  new  DomDocument();
    $dom->loadXML($xml);
    $xpath =  new  DomXPath($dom);
   
    $tag1 = $dom->getElementsByTagName("beg")->item( 0 );
     echo  $xpath->query("following::tag2/tag3[following::end/@id=1]", $tag1)->length;
?>
...
Рейтинг: 0 / 0
Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
    #37453906
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man,

а что получить то хотите?

сам xpath following::tag2/tag3[following::end/@id=1] весьма неоднозначен, т.к. он возвращает все tag3 до себя... а это можно записать как-то так //end[@id=1]/preceding::tag3
...
Рейтинг: 0 / 0
Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
    #37454193
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Цель между тегами beg и end находить вхождения tag2/tag3, причем пар beg и end может быть несколько. У каждой пары beg и end одинаковый id.
...
Рейтинг: 0 / 0
Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
    #37455640
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man,

думаю, ваш XPath выглядит так, если мы обходим tag3:
//beg[@id='1']/following::tag3[parent::tag2 and following::end[@id='1']]

либо так, если обходим tag2:
//beg[@id='1']/following::tag2[tag3 and following::end[@id='1']]
...
Рейтинг: 0 / 0
Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
    #37455843
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man,

//tag2/tag3[preceding::beg/@id=following::end/@id]
...
Рейтинг: 0 / 0
Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
    #37484539
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
refreg,

А как в Вашем случае узнать к какой конкретно паре относятся tag2/tag3?
Т.е. Вы красиво получаете вобще все tag2/tag3 для всех beg и end, но нам надо еще знать кто к какому id относиться.
...
Рейтинг: 0 / 0
Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
    #37484658
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man,

>А как в Вашем случае узнать к какой конкретно паре относятся tag2/tag3?
у тега можно спросить preceding::beg/@id , но да, раком через Париж
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Нужна помощь в оптимизации XPath запроса: following::tag2/tag3[following::end/@id=1]
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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