如何将 xml 声明和处理指令添加到 XQuery 结果之前?

How to prepend an xml declaration and processing instructions to an XQuery result?

XQuery 的结果如何在前面加上 xml 声明,以及如何将其链接到 xslt 的行?

错误:

Stopped at /home/nicholas/git/xml/labs.xq, 8/6:
[XPST0003] Processing instruction has illegal name: xml.

查询:

xquery version "3.1";


for $doc in db:open("covid")

return 

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="labs.xsl"?>

$doc

以便结果可以与 xslt 一起使用。也许将 xml 的声明和“链接”行放在查询之外?

另见:

How to link up XML file with XSLT file?

XML 声明只能通过序列化选项输出,您可以使用例如

声明
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";

declare option output:method 'xml';

在 XQuery 数据模型中没有 XML 声明为节点。

一个处理指令是一个节点,可以被构造和前置例如

for $doc in db:open("covid")
return 
  (<?xml-stylesheet type="text/xsl" href="labs.xsl"?>, $doc)

或者使用

可能更清晰或更明确
for $doc in db:open("covid")
return 
document {
  <?xml-stylesheet type="text/xsl" href="labs.xsl"?>,
  $doc/node()
}