eXist-db XQuery-尽管文件有效且没有错误,但XSLT转换不会产生任何结果

时间:2018-10-20 07:48:50

标签: xslt xquery exist-db xquery-3.0

编辑:已解决-XML文档的路径错误。我会把这个令人尴尬的问题留在原处,希望它可以对其他人有所帮助。

环境:eXist-db 4.2.1,XQuery 3.1,XSLT 2.0

我正在从eXist-DB中的许多模板构建一个网页,最后一个模板调用XSL转换以生成HTML片段。

当我在eXist-DB之外测试它时,XSL转换有效。在XSLT fiddle,您具有完整的XSLT文件和应转换的代表性XML文档。它将生成预期的HTML,而不会出现错误。氧气也可以毫无错误地产生转化。

但是,当我在eXist-db XQuery中执行转换时,它发出执行信号……但没有输出!

该项目的XAR文件(包括所有模块和文件)可以在这里下载:https://www.dropbox.com/s/gtg4lpv9jsh822e/deheresi-0.1.xar

这是应该生成HTML片段的XQuery转换函数:

declare function document:doc-xsl-docview($node as node(), 
               $model as map(*), $currentdoc as xs:string)

{   
  let $currentdocnode := doc(concat($globalvar:URIdb,$currentdoc))

  let $xi := concat("xinclude-path=", $globalvar:URIdb)

  let $xsltdoc := doc(concat($globalvar:URIstyles,
                        "ms609__testxsl-withmodes.xsl"))

  let $xsltransform := transform:transform(
                        $currentdocnode, 
                        $xsltdoc,
                        (<parameters>
                            <param name="paramPersonurl" value="{$globalvar:URLperson}"/>
                            <param name="paramPlaceurl" value="{$globalvar:URLplace}"/>
                            <param name="paramDocurl" value="{$globalvar:URLdoc}"/>
                         </parameters>),(),$xi)
  return $xsltransform
 };

这是HTML(在document.html中)在模板(最后一次模板调用)中调用函数。所有其他doc-sidebar模板都可以完美执行。 <div class="col-md-10 document-view">输出为空div。

<div xmlns="http://www.w3.org/1999/xhtml" data- 
  template="templates:surround" data-template- 
  with="templates/site_wrapper.html" data-template-at="content">

  <div class="col-md-12 document-title">
    <h2>
        <span class="en">Deposition: Arnald Donat</span>
        <span class="fr">Déposition : Arnald Donat</span>
    </h2>
  </div>
  <div class="col-sm-12">
    <div class="col-md-2 sidebar">
        <div data-template="document:doc-sidebar-sub1" data-template-currentdoc="ms609_0013.xml"/>
        <div data-template="document:doc-sidebar-sub2" data-template-currentdoc="ms609_0013.xml"/>
        <div data-template="document:doc-sidebar-sub3" data-template-currentdoc="ms609_0013.xml"/>
        <div data-template="document:doc-sidebar-sub4" data-template-currentdoc="ms609_0013.xml"/>
    </div>
    <div class="col-md-10 document-view">
        <div data-template="document:doc-xsl-docview" data-template-currentdoc="ms609_0013.xml"/>
    </div>
  </div>
</div>

作为测试的一部分,我执行了以下操作:我将所需的HTML片段硬编码为XSL文件(texthtmlonly.xsl),然后从同一函数中调用它。成功产生输出。

在这一点上,我看不到XSL转换不起作用的任何原因:

  • XSL和XML文件产生有效结果而不会出错(在eXist之外)

  • XQuery转换使用硬编码的XSL文件生成结果

  • HTML会正确调用所有模板

非常感谢。

NB:TEI-XML文件(ms609_0013.xml)被临时硬编码以在eXist-DB中进行测试。

编辑:已解决-XML文档的路径错误。我会把这个令人尴尬的问题留在原处,希望它可以对其他人有所帮助。

0 个答案:

没有答案