在XQuery中将Doctype指令添加到XML节点

时间:2011-04-21 19:59:49

标签: xml xslt xpath xquery

在我的XQuery中,我有一个存储在变量$ d中的xml节点,如:

<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 个答案:

答案 0 :(得分:2)

要输出XML声明和DOCTYPE声明,您需要设置影响查询结果序列化方式的参数。你这样做的方式取决于你正在使用的XQuery处理器。

要输出处理指令,请在查询正文中使用文字处理指令。

答案 1 :(得分:1)

您应该使用处理指令和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>