Парсер XML

Парсер XML предназначен для работы с данными в формате XML, которые могут размещаться в любых частях запроса.

Вы можете использовать имя парсера XML в point'е без фильтров, предоставляемых этим парсером, для того, чтобы напрямую работать с содержимым верхнеуровневого контейнера для XML-данных.

Пример: для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY eee SYSTEM "aaaa">]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- test -->
<text>
    Sample text.
</text>

point POST_XML_value будет указывать на данные в сыром формате:

<!DOCTYPE foo [<!ENTITY eee SYSTEM "aaaa">]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- test -->
<text>
    Sample text.
</text>

Парсер XML строит на основе входных данных сложную структуру, к элементам которой можно обращаться при помощи следующих фильтров:

Имя парсера Xml в верхнем регистре необходимо всегда указывать в point'е перед использованием фильтров, предоставляемых этим парсером. Чтобы использовать фильтр в point’е, добавьте в point название фильтра в верхнем регистре.

Фильтр Xml_comment

Фильтр Xml_comment указывает на массив с комментариями в данных формата XML. К элементам этого массива необходимо обращаться по индексу. Индексация массива начинается с нуля.

Использование регулярных выражений в point'ах

Данный фильтр можно использовать в point'е только после указания имени парсера XML.

Пример:

Для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY eee SYSTEM "aaaa">]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- first -->
<text>
    Sample text.
</text>
<!-- second -->

при применении к телу запроса совместно с XML-парсером фильтр Xml_comment будет указывать на следующий массив:

Индекс Значение
0 first
1 second
  • Point POST_XML_XML_COMMENT_0_value будет ссылаться на значение first, которое находится в массиве, на который указывает фильтр Xml_comment, с индексом 0;
  • Point POST_XML_XML_COMMENT_1_value будет ссылаться на значение second, которое находится в массиве, на который указывает фильтр Xml_comment, с индексом 1.

Фильтр Xml_dtd

Фильтр Xml_dtd указывает на адрес используемой внешней DTD-схемы. Данный фильтр можно использовать в point'е только после указания имени парсера XML.

Фильтр Xml_dtd указывает на строковое значение. Данный фильтр не может указывать на сложные структуры данных (массивы и хэш-таблицы).

Пример:

Для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0" standalone="no"?>
<!DOCTYPE foo SYSTEM "example.dtd">
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- first -->
<text>
    Sample text.
</text>

point POST_XML_DTD_value будет указывать на значение example.dtd.

Фильтр Xml_dtd_entity

Фильтр Xml_dtd_entity указывает на массив с определенными в XML-данных директивами DTD-схемы. К элементам этого массива необходимо обращаться по индексу. Индексация массива начинается с нуля.

Использование регулярных выражений в point'ах

Данный фильтр можно использовать в point'е только после указания имени парсера XML.

Пример:

Для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe "aaaa">
<!ENTITY sample "This is sample text.">
]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- first -->
<text>
    &xxe;
</text>
<text>
    &sample;
</text>

при применении к телу запроса совместно с XML-парсером фильтр Xml_dtd_entity будет указывать на следующий массив:

Индекс Имя Значение
0 xxe aaaa
1 sample This is sample text.

В данном массиве каждому индексу соответствует пара имя-значение, соответствующая имени и значению директивы DTD-схемы.

  • Для обращения к имени директивы добавьте в конце point'а, использующего фильтр Xml_dtd_entity, постфикс _name;
  • Для обращения к значению директивы добавьте в конце point'а, использующего фильтр Xml_dtd_entity, постфикс _value.
  • Point POST_XML_XML_DTD_ENTITY_0_name будет ссылаться на имя директивы xxe, которое находится в массиве, на который указывает фильтр Xml_dtd_entity, с индексом 0;
  • Point POST_XML_XML_DTD_ENTITY_1_value будет ссылаться на значение директивы This is sample text., которое находится в массиве, на который указывает фильтр Xml_dtd_entity, с индексом 1.

Фильтр Xml_pi

Фильтр Xml_pi указывает на массив инструкций по обработке, определенных для XML-данных. К элементам этого массива необходимо обращаться по индексу. Индексация массива начинается с нуля.

Использование регулярных выражений в point'ах

Данный фильтр можно использовать в point'е только после указания имени парсера XML.

Пример:

Для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY eee SYSTEM "aaaa">]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<?last-edit user="John" date="2019-05-11"?>
<!-- first -->
<text>
    Sample text.
</text>

при применении к телу запроса совместно с XML-парсером фильтр Xml_pi будет указывать на следующий массив:

Индекс Имя Значение
0 xml-stylesheet type="text/xsl" href="style.xsl"
1 last-edit user="John" date="2019-05-11"

В данном массиве каждому индексу соответствует пара имя-значение, соответствующая имени и значению инструкции по обработке XML-данных.

  • Для обращения к имени инструкции добавьте в конце point'а, использующего фильтр Xml_pi, постфикс _name;
  • Для обращения к значению инструкции добавьте в конце point'а, использующего фильтр Xml_pi, постфикс _value.
  • Point POST_XML_XML_PI_0_name будет ссылаться на имя инструкции xml-stylesheet, которое находится в массиве, на который указывает фильтр Xml_pi, с индексом 0;
  • Point POST_XML_XML_PI_1_value будет ссылаться на значение инструкции user="John" date="2019-05-11", которое находится в массиве, на который указывает фильтр Xml_pi, с индексом 1.

Фильтр Xml_tag

Фильтр Xml_tag указывает на хэш-таблицу тегов XML в XML-данных. К элементам этой хэш-таблицы необходимо обращаться по имени тега. Данный фильтр можно использовать в point'е только после указания имени парсера XML.

Использование регулярных выражений в point'ах

Теги в XML-документе могут также содержать массивы значений. Для обращения к значениям, которые содержатся в этих массивах, необходимо использовать фильтр Array или Xml_tag_array.

Пример:

Для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY eee SYSTEM "aaaa">]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- first -->
<text>
    Sample text.
</text>
<sample>
    &eee;
</sample>

при применении к телу запроса совместно с XML-парсером фильтр Xml_tag будет указывать на следующую хэш-таблицу:

Ключ Значение
text Sample text.
sample aaaa
  • Point POST_XML_XML_TAG_text_value будет ссылаться на значение Sample text., находящееся в хэш-таблице, на которую указывает фильтр Xml_tag, с ключом text;
  • Point POST_XML_XML_TAG_sample_value будет ссылаться на значение aaaa, находящееся в хэш-таблице, на которую указывает фильтр Xml_tag, с ключом sample.

Фильтр Xml_tag_array

Фильтр Xml_tag_array указывает на массив значений тега в XML-документе. К элементам этого массива необходимо обращаться по индексу. Индексация массива начинается с нуля. Данный фильтр можно использовать в point'е только после указания имени парсера XML.

Фильтр Array в применении к XML-документу работает аналогично фильтру Xml_tag_array.

Способы обращения к содержимому тега

Для XML-парсера нет разницы между содержимым тега и первым элементом в массиве значений для тега. Например, point'ы POST_XML_XML_TAG_myTag_value и POST_XML_XML_TAG_myTag_ARRAY_0_value указывают на одно и то же значение.

Пример:

Для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY eee SYSTEM "aaaa">]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- first -->
<text>
    Sample text.
</text>
<text>
    &eee;
</text>

при применении к тегу text в теле запроса в формате XML фильтр Xml_tag_array будет указывать на следующий массив:

Индекс Значение
0 Sample text.
1 aaaa
  • Point POST_XML_XML_TAG_text_XML_TAG_ARRAY_0_value будет ссылаться на значение Sample text., которое находится в массиве значений тега text, на который указывает фильтр Xml_tag_array, с индексом 0;
  • Point POST_XML_XML_TAG_text_XML_TAG_ARRAY_1_value будет ссылаться на значение aaaa, которое находится в массиве значений тега text, на который указывает фильтр Xml_tag_array, с индексом 1.

Фильтр Xml_attr

Фильтр Xml_attr указывает на хэш-таблицу атрибутов тега в XML-документе. К элементам этой хэш-таблицы необходимо обращаться по имени атрибута.

Использование регулярных выражений в point'ах

Имя атрибута в point'е может являться регулярным выражением языка программирования Ruby.

Данный фильтр можно использовать в point'е только после указания фильтра Xml_tag.

Пример:

Для запроса

POST http://example.com/main/login HTTP/1.1
Content-type: application/xml

с телом

<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY eee SYSTEM "aaaa">]>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<!-- first -->
<text category="informational" font="12">
    Sample text.
</text>

при применении к телу запроса совместно с XML-парсером и фильтром Xml_tag для тега text фильтр Xml_attr будет указывать на следующую хэш-таблицу:

Ключ Значение
category informational
font 12
  • Point POST_XML_XML_TAG_text_XML_ATTR_category_value будет ссылаться на значение informational, которое находится в хэш-таблице атрибутов тега text, на которую ссылается фильтр Xml_attr, с ключом category;
  • Point POST_XML_XML_TAG_text_XML_ATTR_font_value будет ссылаться на значение 12, которое находится в хэш-таблице атрибутов тега text, на которую ссылается фильтр Xml_attr, с ключом font.

results matching ""

    No results matching ""