Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Можно ли создать такой XPath запрос? / 8 сообщений из 8, страница 1 из 1
05.02.2011, 00:09
    #37098933
Xpath'er
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
Вот пример HTML кода.
Можно ли создать такой запрос XPath, чтоб найти фрагменты "порезав" по линиях?
Имею ввиду найти все h2 и following-sibling's до следующего h2 (или конца).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<div>
  <h2>header  1 </h2>
  <p>I wish it be true</p>
  <p>Sleep well</p>
---------
  <h2>header  2 </h2>
  <p>I wish it be false</p>
  <p>Everything ends</p>
---------
  <h2>header  3 </h2>
  <p>I don't cate</p>
  <p>Never divide to zero</p>
</div>
...
Рейтинг: 0 / 0
05.02.2011, 10:45
    #37099147
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
Xpath'erНайти все h2 и following-sibling's до следующего h2 (или конца)Если формально подойти, к этому условию, то в набор узлов войдут все child элемента div. И ответ:
Код: plaintext
select="div/*"

Теперь объясни, так что же все таки надо, учитывая, что XPath обязан выдать набор узлов. Какие узлы в из примера выше должны войти в результирующий набор узлов.
...
Рейтинг: 0 / 0
05.02.2011, 11:56
    #37099186
Xpath'er
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
Можно разбить на два шага:
- "div/h2"
- в цикле для каждого найденного h2 найти все following-sibling's до следующего h2 (или конца).

Для первого h2 будут:
Код: plaintext
1.
2.
  <p>I wish it be true</p>
  <p>Sleep well</p>

Для второго h2 будут:
Код: plaintext
1.
2.
  <p>I wish it be false</p>
  <p>Everything ends</p>

Для третьего h2 будут:
Код: plaintext
1.
2.
  <p>I don't cate</p>
  <p>Never divide to zero</p>
...
Рейтинг: 0 / 0
05.02.2011, 12:32
    #37099207
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
Xpath'er,

так пойдет?
Код: plaintext
1.
2.
select="/div/*[(.=../h2[1]/following-sibling::*) and (.=../h2[2]/preceding-sibling::*)]"
select="/div/*[(.=../h2[2]/following-sibling::*) and (.=../h2[3]/preceding-sibling::*)]"
select="/div/*[(.=../h2[3]/following-sibling::*) ]"

Конечный тег выпадает из правила. Может можно и проще. Пока не придумал.
Наверняка будет проще с XPath 2. И можно сделать достаточно легко условиями в XSL
...
Рейтинг: 0 / 0
05.02.2011, 12:50
    #37099228
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
refreg,

Так понятнее будет. И, учел конечный элемент...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template match="/">
		<root>
			<xsl:apply-templates select="div/h2"/>
		</root>
	</xsl:template>
	<!-- -->
	<xsl:template match="h2">
		<h2_item>
			<xsl:for-each select="../*[(.=current()/following-sibling::*) and ((.=(current()/following-sibling::h2[1])/preceding-sibling::*) or not(current()/following-sibling::h2[1]))]">
				<xsl:copy-of select="."/>
			</xsl:for-each>
		</h2_item>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
05.02.2011, 18:03
    #37099551
Xpath'er
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
Спасибо!

На втором шаге в цикле делаю так:
./following-sibling::*[name() != 'h2'][preceding-sibling::h2[1][.='content_of_header']]
...
Рейтинг: 0 / 0
10.02.2011, 00:36
    #37107997
Xpath'er
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
А как можно ссылаться на элемент, если у него нету тела и атрибутов?

Допустим в примере вместо <h2> стоит просто <br />
...
Рейтинг: 0 / 0
10.02.2011, 08:00
    #37108127
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли создать такой XPath запрос?
Xpath'er,

Также. Подозреваю, что у тя другая проблема - как здесь .
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Можно ли создать такой XPath запрос? / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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