Парсер 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_comment;
- Фильтр Xml_dtd;
- Фильтр Xml_dtd_entity;
- Фильтр Xml_pi;
- Фильтр Xml_tag;
- Фильтр Xml_tag_array;
- Фильтр Xml_attr.
Имя парсера Xml в верхнем регистре необходимо всегда указывать в point'е перед использованием фильтров, предоставляемых этим парсером. Чтобы использовать фильтр в point’е, добавьте в point название фильтра в верхнем регистре.
Фильтр Xml_comment
Фильтр Xml_comment указывает на массив с комментариями в данных формата XML. К элементам этого массива необходимо обращаться по индексу. Индексация массива начинается с нуля.
Использование регулярных выражений в point'ах
Индекс в point'е может являться регулярным выражением языка программирования Ruby.
Данный фильтр можно использовать в 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'е может являться регулярным выражением языка программирования Ruby.
Данный фильтр можно использовать в 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'е может являться регулярным выражением языка программирования Ruby.
Данный фильтр можно использовать в 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'ах
Имя тега в point'е может являться регулярным выражением языка программирования Ruby.
Теги в 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.
Индекс в point'е может являться регулярным выражением языка программирования Ruby.
Фильтр 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 ""
results matching ""
No results matching ""