Студия Артемия Лебедева выпустила новую версии языка программирования Parser 3.0. Среди изменений -- поддержка UTF8, XML DOM, XSLT, XPath.
Поддержка XML реализована на базе libxml и libxslt от GNOME XML с дополнительными патчами (например, отсутствие "meta" на xhtml-выходе xslt-преобразования). Судя по реликтам типа "xalan-patched", рассматривались и альтернативные варианты для базовой библиотеки.
Документация на Парсер пока не содержит описание XML-возможностей, но из приведённых в документации примеров можно получить общее представление.
Пример кода (Урок 6):
# входной XML код
$xmlCode[<?xml version="1.0" encoding="$request:charset" ?>
# "http://localhost" в CGI версии Parser заменяется на $env:DOCUMENT_ROOT
# <!DOCTYPE document SYSTEM "http://localhost/entities.dtd">
<document>
Привет, мир!
</document>
]
# входной xdoc документ
$srcDoc[^xdoc::create{$xmlCode}]
# преобразование xdoc документа шаблоном global.xsl
$transformedDoc[^srcDoc.transform[/xsl/global.xsl]]
# выдача результата в HTML виде без отступов (с отступами есть
# проблемы перед </td>)
$response:body[^transformedDoc.string[
$.method[html]
$.indent[no]
]]
Класс xdoc предназначен для работы с древовидными структурами данных в паре с xnode, и поддерживает считывание файлов в XML формате и запись в XML и HTML, а также XSLT трансформацию. Работа с деревом производится в DOM модели, поддерживается DOM1 и, частично, DOM2. Объект xnode поддерживает XPath запросы.
Пример кода из черновика описания методов xnode:
$d[^xdoc::set{<?xml version="1.0" encoding="windows-1251"?><d
attr="привет" n="123"/>}]
^d.selectString[string(d/@attr)]<br>
^d.selectNumber[2*2]<br>
^d.selectNumber[number(/d/@n)+1]<br>