我需要一些帮助。
我正在尝试编写一个XQuery,其输出将是一个XHTML文件。问题是,“XHTML文档必须具有XHTML DOCTYPE声明”,并且我无法将DOCTYPE行放入我的XQuery文件中以生成有效的XHTML文件。
我可能误解了某些内容,所以感谢任何帮助。
更具体地说:
我有一个小的XQuery脚本:
for $book in doc("data.xml")//book
where $book/copycount = max(
for $count in doc("data.xml")//book/copycount
return $count
)
return (data($book/title))
我想围绕这个脚本生成一个有效的XHTML文件,显示返回的字符串。
答案 0 :(得分:1)
如果你的XQuery处理器没有自己序列化结果,你必须告诉我们你的平台以及你如何使用结果的更多信息。
如果您的处理器序列化结果本身并且是1.0,那么您必须告诉我们您使用的是哪一个,并查看其文档以了解依赖于实现的开关。
最后但并非最不重要的是,如果您使用XQuery 3.0并且您的处理器负责序列化,您可以使用以下内容告诉它使用正确的DOCTYPE将输出树序列化为XHTML(请参阅规范中的相关定义)在http://w3.org/TR/xquery-30/#id-serialization和http://w3.org/TR/xslt-xquery-serialization-30/#xhtml-output):
xquery version "3.0";
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "xhtml";
declare option output:doctype-public "-//W3C//DTD XHTML 1.0 Transitional//EN";
declare option output:doctype-system "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
/some/query/here
答案 1 :(得分:-1)
执行此操作的一种通用方法是将其作为文档节点的文本节点子项插入:
document {
text { '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' },
xdmp:quote(
**** your XQY ****
)
(: or in eXist, util:serialize(), etc. :)
}
有些XQuery处理器有这样的选项标记,所以您可以使用它,让处理器为您序列化。