Я пробую это в XQuery (предположим, что doc ('input: instance') действительно возвращает действительный XML-документ), который создается с использованием XSLT
let $a:= <xsl:text>"<xsl:copy-of select="doc('input:instance')//A" />"</xsl:text>
let $p := <xsl:text>"<xsl:copy-of select="doc('input:instance')//P" />"</xsl:text>
let $r := <xsl:text>"<xsl:copy-of select="doc('input:instance')//R" />"</xsl:text>
Но получаю ошибку:
xsl:text must not contain child elements
Как получить результаты XML с помощью XPath в xsl: copy-of, а затем закодировать специальные символы, полученные в результате, при форматировании результата в виде строки? Я был бы счастлив использовать раздел CDATA, если это возможно (если я сделаю это вместо xsl: text выше, xsl: copy-of не будет оцениваться, поскольку он становится частью раздела CDATA).
Очевидно, я новичок в XSL ...
2 ответа
Что вам здесь нужно, так это возможность сериализовать XML-документ (здесь документ, возвращенный doc ()) с использованием XML-сериализации в строку.
Для этого в различных реализациях XQuery есть функции расширения. Например, если вы используете Saxon:
saxon:serialize(document, 'xml')
Это не имеет ничего общего с XQuery (вы можете создавать таблицу стилей XSLT с любым языком, даже с XSLT itlef!).
Из http://www.w3.org/TR/xslt20/#xsl-text < / а>
<!-- Category: instruction --> <xsl:text [disable-output-escaping]? = "yes" | "no"> <!-- Content: #PCDATA --> </xsl:text>
[...] Содержание
xsl:text
элемент - это единственный текстовый узел, value формирует строковое значение новый текстовый узел.
Похожие вопросы
Новые вопросы
xquery
XQuery - это функциональный язык, предназначенный для запроса и обработки данных XML. Это расширенный набор XPath, к которому добавляются такие функции, как создание новых узлов и более мощные выражения FLWOR. Несмотря на то, что XQuery разделяет свою модель данных с XSLT, она оптимизирована для запросов, а не для преобразования данных, и поэтому имеет другой дизайн, основанный на SQL.