Какое выражение XPath для выбора инструкции обработки? - PullRequest
10 голосов
/ 24 февраля 2012

Я использую xsl:stylesheet Инструкция обработки в моем XML. Есть ли способ выбрать этот PI с помощью XPath? Если так, то как?

Ответы [ 3 ]

7 голосов
/ 24 февраля 2012

Использовать processing-instruction() Проверка узла.

5 голосов
/ 26 февраля 2012

Обычно команду обработки можно выбрать с помощью теста узла 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"?>
0 голосов
/ 16 июля 2015

Инструкция обработки, состоящая из двух частей, цели и данных с синтаксисом:

<?target data?>

Если вы используете:

<xsl:value-of select="/processing-instruction('xml-stylesheet')" />

Он вернет только часть данных, на примере Димитра Новатчева он вернет:

type="text/xsl" href="test"

Таким образом, строковое значение инструкции обработки является частью данных. Выражение select <xsl:value-of вычисляется, и результирующий объект преобразуется в строку, как неявный вызов функции string().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...