Включение файлов XML, RSS и RDF
Процедура включения внешнего правильно оформленного (well-formed) документа XML очень похожа на метод parsed. Режим обработки XML активизируется присваиванием атрибуту method значения XML, RSS или RDF. Кроме того, он автоматически выбирается при передаче атрибута src с расширениями .xml, .rss и .rdf.
Атрибут delimiter в этом контексте задает имя элемента (тега), в котором производится поиск полей. В общем случае значения полей выводятся в порядке их следования в файле XML, если в теге <field> не указано имя выводимого элемента. Например, атрибут name="title" описывает символьные данные, заключенные между тегами <title> и </title> исходного документа XML.
В качестве примера рассмотрим документ XML languages.xml, в котором перечисляются языки взаимодействия с PostgreSQL. Документ имеет следующую структуру:
<?xml version="1.0" encoding="utf-8"?> <languages> <language> <name>C</name> <notes>Buill-in language.</notes> </language> <language> <name>LXP</name> <notes>Web-based content language.</notes> </language> <language> <name>PL/pgSQL</name> <notes>PostgreSQL procedural language.</notes> </language> </languages>
Обратите внимание: каждый язык описывается отдельным элементом <language>. Чтобы произвести лексический разбор этого файла XML по аналогии с рассмотренным выше примером файла с разделителями, присвойте атрибуту delimiter тега <include> значение language, а атрибуту src – значение languages.xml. Пример приведен в листинге 13.24.
Листинг 13.24. Включение файла XML.
<lхр> <include src="languages.xml" delimiter="language" method="xml"> Language Name: <field name="name" /><br /> Language Notes: <field name="notes" /><br /> <hr /> </include> </lxp>
После выполнения этого фрагмента будет получен следующий результат:
Language Name: C<br /> Language Notes: Built-in language.<br /> <hr /> Language Name: LXP<br /> Language Notes: Web-based content language.<br /> <hr /> Language Name: PL/pgSQL<br /> Language Notes: PostgreSQL procedural language.<br /> <hr />
В листинге 13.25 приведен пример отображения простого документа RDF XML. Он отличается от примера из листинга 13.24 тем, что относится именно к документу RDF. В результате атрибут delimiter можно не указывать, поскольку значение по умолчанию item подходит для структуры данных RDF.
Листинг 13.25. Включение файла RDF.
<lхр> <include src › >/home/web/ports/headlines/slashdot.rdf>> lastblock › >5"> <table Dorder › >0" cellspacing › >l"><tr> <td bgcolor › >#ffffff>> width › >100%> <div class › >content>>> – <field name › >title>>></div> </td> </tr><tr> <td bgcolor › >#e0e0e8" width › >100%> <strong> <field name › >link>> type › >url>> link › >Read More…>> target › >_blank>>> </strong><br /> </td> </tr></table> </include> </lxp>
Обратите внимание на атрибут lastblock в листинге 13.25. Этот атрибут уже упоминался в подразделе "Включение файлов с разделителями >> этого раздела. Атрибуты firstblock и lastblock также используются при включении файлов XML, RDF и RSS и определяют размер и смещение выводимых блоков.
Внимание
Учтите, что все документы XML, включаемые средствами LXP, должны быть правильно оформлены, иначе модуль лексического разбора выдаст ошибку. Ошибки разбора XML сохраняются в журнале ошибок Apache с префиксом [Ixp] XML Parse Error.