Добавление инструкции Doctype в узел XML в XQuery - PullRequest
1 голос
/ 21 апреля 2011

В моем XQuery у меня есть xml-узел, хранящийся в переменной $ d, например:

<topic id="IL27TRM409WedNov1919274820081">
<title>Access Switch Failure</title>
<body>
    and Reacting</i> feature of the <i>SMSC User Guide</i>.</p>
</body>
</topic>

Мой вопрос сейчас, поскольку мне нужно добавить три инструкции по обработке, включая объявление DocType вверхуиз вышеприведенного документа, в настоящее время результирующий документ является просто чистым узлом XML.Поэтому я хочу добавить следующие три строки:

<?xml version="1.0" encoding="UTF-8"?>
<?exist-serialize indent="no" output-doctype="yes"?>
<!DOCTYPE task PUBLIC "-//OASIS//DTD DITA Task//EN" "task.dtd">

вверху.Я попытался использовать concat() до $d, но не получилось.Интересно, возможно ли такое явное манипулирование контентом XML в XQuery, в противном случае я думаю, что мне нужно внести изменения в свой XSLT, чтобы иметь $d, рожденные с инструкциями обработки.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Чтобы вывести объявление XML и объявление DOCTYPE, вам нужно установить параметры, влияющие на способ сериализации результата запроса.То, как вы это сделаете, зависит от используемого вами процессора XQuery.

Для вывода инструкции обработки используйте буквенную инструкцию обработки в теле запроса.

1 голос
/ 22 апреля 2011

Вы должны использовать инструкции обработки вместе с выводом xsl, что-то вроде:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" 
    doctype-public="-//OASIS//DTD DITA Task//EN" 
    doctype-system="task.dtd"/>

    <xsl:template match="/">
        <xsl:processing-instruction name="exist-serialize">indent="no" output-doctype="yes"
        </xsl:processing-instruction>

        <xsl:apply-templates />
    </xsl:template>
    [...]
</xsl:stylesheet>
...