Компонент Парсер — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
(Язык OQuery для HTML)
(Язык OQuery для HTML)
Строка 52: Строка 52:
 
  </list>
 
  </list>
 
  <list index="3" name="matrixnull">
 
  <list index="3" name="matrixnull">
        </list>
+
        </list>
 
  </info>
 
  </info>
  

Версия 09:16, 21 января 2014

Наверх

Компонент "Парсер" предназначен для разбора текстовых структур.

  • Для разбора обычного текста применяются регулярные выражения
  • Для разбора гипертекста или XML-структуры применяется парсер OQuery
  • Для разбора JSON-структура применяется парсер JSON

Входным аргументом для парсера является Документ (структура, подлежащая разбору). Документ может быть задан текстом, через переменную или выражение, с помощью функции. Далее, в зависимости от документа, задается алгоритм поиска и поисковый запрос. При необходимости задаются дополнительные параметры: Функция и Номер элемента. Результат разбора документа ("парсинга") сохраняется в переменную (поле "Результат в переменную").

Если с помощью одного парсера невозможно определить искомое выражение, необходимо использовать последовательность из таких компонентов. Каждый следующий парсер получает на вход результат от предыдущего компонента. Таким образом, возможен сколь угодно глубокий поиск нужной информации.

В этой статье подробно рассматривается применение каждого алгоритма и примеры использования парсера.


Язык OQuery для HTML

Алгоритм OQuery применяется для разбора гипертекста или XML-структуры. Для тестирования запросов применяется программа OQuery-tester.exe.

Рассмотрим следующую XML-структуру:

<?xml version="1.0" encoding="utf-16"?>
<info>
	<list index="1" name="matrix33"> 
		<row id="1" name="aaa">
			<col id="1" name="r1c1" />
			<col id="2" name="r1c2" />
			<col id="3" name="r1c3" />
		</row>
		<row id="2" name="bbb">
			<col id="1" name="r2c1" />
			<col id="2" name="r2c2" />
			<col id="3" name="r2c3" />
	</row>
		<row id="3" name="ccc">
			<col id="1" name="r3c1" />
			<col id="2" name="r3c2" />
			<col id="3" name="r3c3" />
		</row>
	</list>
	<list index="2" name="matrix22">
		<row id="1" name="ddd">
			<col id="1" name="element11" />
			<col id="2" name="element12" />
		</row>
		<row id="2" name="eee">
			<col id="1" name="element21" />
			<col id="2" name="element22" />
		</row>
	</list>
	<list index="3" name="matrixnull">
        </list>
</info>

XML-структура представляет из себя два листа, на первом листе матрица 3x3, на другом матрица 2x2. Ниже приведены запросы как можно добраться до каждого компонента в представленной структуре.

info - запрос отображает все теги <info> и их содержимое.

list - запрос отображает все теги <list> и их содержимое. В примере, информация по двум листам.

list[index="2"] - запрос отображает все теги <list index="2"> (у которых атрибут index=2) и их содержимое. В примере, вся информация во втором листе.

col[id="2"] - запрос отображает все теги <col id="2"> (у которых атрибут id="2"). В примере, все элементы во втором столбце в обеих матрицах.

list[index="2"] col[id="2"] - запрос отображает все теги <col id="2">, которые находятся в <list index="2">. В примере, это все элементы во втором столбце, которые находятся на втором листе.

col[id="2"][name="element22"] - запрос отображает все теги <col id="2" name="element22" />

После того, как вы доберетесь до нужного тега, например <col id="1" name="element21" /> вы можете определить значение каждого атрибута (id, name). Для этого воспользуйтесь свойством компонента "Функция" и выберите "Значения атрибута", а в поле "Атрибут" введите название, например name.

Если запрос возвращает несколько тегов, вы можете перебрать каждый в цикле, воспользовавшись полем "Номер элемента". Количество найденных тегов можно найти с помощью Функции "Количество элементов".

Синтаксис языка OQuery также описан в технической документации: [| Парсер]

Пример использования: Служебный_сценарий_обработки_контента

Регулярные выражения

Парсер JSON