Преобразование копии вывода в строку и экранирование специальных символов XML (например, символов меньше (<) и больше (>)) - PullRequest
0 голосов
/ 28 апреля 2011

Я пытаюсь это сделать в 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 ]

0 голосов
/ 28 апреля 2011

Здесь вам нужна возможность сериализации XML-документа (здесь документа, возвращаемого doc ()) с использованием XML-сериализации, в строку.

Различные реализации XQuery имеют функции расширения для этой цели.Например, если вы используете Saxon:

saxon:serialize(document, 'xml')
0 голосов
/ 28 апреля 2011

Это не имеет ничего общего с XQuery (вы могли бы создавать таблицу стилей XSLT с любым языком, даже с самим XSLT!).

С http://www.w3.org/TR/xslt20/#xsl-text

<!-- Category: instruction -->
<xsl:text
  [disable-output-escaping]? = "yes" | "no">
  <!-- Content: #PCDATA -->
</xsl:text>

[...] Содержание xsl:text Элемент представляет собой один текстовый узел, чей значение формирует строковое значение новый текстовый узел.

...