首页 > 解决方案 > 如何在 XQuery 结果中添加 xml 声明和处理指令?

问题描述

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的声明和“链接”行放在查询之外?

也可以看看:

如何将 XML 文件与 XSLT 文件链接起来?

标签: xmlxsltxquerybasexflwor

解决方案


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()
}

推荐阅读