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

发布于 2024-11-03 02:08:30 字数 725 浏览 2 评论 0原文

在我的 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">

在顶部。我尝试对 $d 使用 concat(),但失败了。我想知道这种显式 XML 内容操作在 XQuery 中是否可行,否则我想我必须更改我的 XSLT 以使 $d 天生具有处理指令。

In my XQuery,I have an xml node stored in a variable $d, like:

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

My question is now, since I need to add three processing instructions including the DocType declaration on the top of the above document, currently the result document is just a pure XML node. So basically I want to add the following three lines:

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

at the top. I tried using concat() to the $d, but failed. I wonder if this kind of explicit XML content manipulation is feasible in XQuery, otherwise I think I have to make change to my XSLT to have $d borned-with processing-instructions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遇见了你 2024-11-10 02:08:30

要输出 XML 声明和 DOCTYPE 声明,您需要设置影响查询结果序列化方式的参数。执行此操作的方式取决于您所使用的 XQuery 处理器。

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

To output the XML declaration and the DOCTYPE declaration, you need to set parameters affecting the way the result of the query is serialized. The way you do this depends on the XQuery processor you are using.

To output the processing instruction, use a literal processing instruction in the query body.

残疾 2024-11-10 02:08:30

您应该将处理指令与 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>

You should use processing instructions along with xsl output, something like:

<?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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文