Обычно команду обработки можно выбрать с помощью теста узла processing-instruction()
.
В частности, в качестве аргумента можно указать имя (цель) требуемого узла PI.
Использовать :
/processing-instruction('xml-stylesheet')
Выбирает любую инструкцию обработки с именем xsl-stylesheet
, определенную на глобальном уровне (является родственным элементом верхнего элемента).
Обратите внимание, что xsl:stylesheet
является недопустимой целью PI для PI.Двоеточие ':'
используется для отделения префикса пространства имен от локального имени - однако инструкция обработки target не может принадлежать пространству имен.Согласно спецификации W3c XPath :
" Инструкция обработки имеет расширенное имя: локальная часть является целью инструкции обработки; URI пространства именis null . "
Также в соответствии с документом W3C: " Связывание таблиц стилей с документами XML 1.0 ", цель PI, которая связываетТаблица стилей для XML-документа должна быть: "xml-stylesheet"
- не "xsl:stylesheet"
или "xsl-stylesheet"
.
Вот полный пример :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="/processing-instruction('xml-stylesheet')"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к следующему документу XML :
<?xml-stylesheet type="text/xsl" href="test"?>
<Books>
<Book name="MyBook" />
</Books>
, вычисляется выражение XPath и выводится выбранный узел PI :
<?xml-stylesheet type="text/xsl" href="test"?>