RXParser 1.7125 - универсальный преобразователь текстовых документов

Правила сборки выходного документа (rxml)

Сборка выходного файла происходит по правилам, которые объявляются в файлах правил сборки.
rxml - рекомендуемое расширение для таких файлов.

Теги rxml

Для задания мест вставки данных из разобранного документа используются теги с именем rxml.
Такие теги имеют краткий вид:

<rxml:пространство_имён [список_параметров] />

или полный вид:

<rxml:пространство_имён [список_параметров] /> Комментарий </rxml:пространство_имён>

Описание пространство имён

Описание пространства имён совпадает с описанием из правил разбора документа.

Описание список атрибутов

Список атрибутов состоит из отдельных атрибутов: пар "ключ"=>"значение"

атрибут1=значение1 атрибут2=значение2 ... атрибутN=значениеN

Значения атрибутов могут заключаться в двойные """ или одинарные "'" кавычки, иначе, невозможно использование в атрибутах символов "'" и """, а так же "пробел".

Типы атрибутов

Имя атрибута Значение атрибута
VALUE - <имя переменной> из заданного <пространства имён>.
INDEX - указывается порядковый номер элемента из массива данных <переменной> из заданного <пространства имён>. Если определён этот атрибут, данные, представляемые данным тегом, автоматически становится статическим.
TYPE - указывается <тип обработчика> данных. При выводе, данные могут обрабатываться дополнительно, помимо их преобразования при разборке документа.
Дополнительное описание в таблице «Предопределённые типы обработчиков»

Пример использования простых тегов rxml

Примеры я буду приводить основываясь на данных:

Задано правило разбора для пространства имён pulp-fiction:

"Новость" : pulp-fiction ( ссылка : LINK , заголовок : TEXT ).
	<img src="bulletlong\.gif" width="4" height="16" border="0"[^>]*> 
	<a class="ea" href="([^"]+)">
		(.+?)
	</a>
	<br>
.

задаю правило сборки:

<li>
<a href="<rxml:pulp-fiction value="ссылка" index="0" />"> <rxml:pulp-fiction value="заголовок" index="0" type="TEXT/ENTITY" /> </a>
</li>

Таким образом, удастся отформатировать только заголовок одной из найденных новостей (по порядку "index"), а хотелось бы вывести все. Для решения этой проблемы применяются итераторы.

Итераторы rxml

Итераторы применяются для вывода многомерных массивов данных.

Простой тег rxml считается предствляющим статические данные, если для него определён атрибут "index". Другими словами, данные, представляемые таким тегом не зависят от итератора.

Итераторы выполняются только для заданного пространства имён.
Во избежание непредвиденных ситуаций, внутри итератора маркируйте теги с отличным пространством имён как статические.

<rxml-iter:пространство_имён>
тело_итератора
</rxml-iter:пространство_имён>

Описание тела итератора

Тело итератора может состоять из таких частей:

Примеры использования итераторов

Использование итератора для форматирования одномерного массива данных:

<rxml-iter:pulp-fiction>
<li>
<a href="<rxml:pulp-fiction value="ссылка" index="0" />"> <rxml:pulp-fiction value="заголовок" index="0" type="TEXT/ENTITY" /> </a>
</li>
</rxml-iter:pulp-fiction>

Допустим, новости разбиты по рубрикам, тогда сначала необходимо дополнительно определить правило разбора рубрик:

"Рубрика" : news-block ( заголовок : TEXT ).
	<b>([^<>]*)</b><br>
		<img src="bulletlong\.gif"[^>]*> 
			<a class="ea"
	
.

Использование итераторов для форматирования многомерного массива данных:

<rxml-iter:news-block>
<strong> <rxml:news-block value="заголовок" type="AS-IS" /> </strong> <br>
<ul> <rxml-iter:pulp-fiction>
<li>
<a href="<rxml:pulp-fiction value="ссылка" index="0" />"> <rxml:pulp-fiction value="заголовок" index="0" type="TEXT/ENTITY" /> </a>
</li>
</rxml-iter:pulp-fiction>
</ul>
</rxml-iter:news-block>

Заключение

Живые примеры составления файлов правил разбора и правил сборки вы можете найти в папке ./config/


[ Главная страница ] [ Правила разбора ] [ Правила сборки ]


RXParser. Автор Шатров А. С. <cdch@yandex.ru>
Краснодар, 13.03.2005