xslt / saxon-将key()与collection()结合使用:序言中不允许内容吗?

时间:2018-10-22 12:52:23

标签: xslt xslt-2.0 saxon

我在file:///Users/username/foopath上有一份tei-xml文档。我需要通过XSLT 2.0转换访问这些文档以获取密钥。

我有一个关键字,应该在//tei:seg[@type='dep_event']/@corresp

的那些文档中搜索匹配项

因此,我声明了一个用于文档收集的变量:

 <xsl:variable name="coll" 
    select="collection('file:///Users/username/foopath')"/>

和一个键:

<xsl:key name="correspidkey" 
     match="tei:seg[@type='dep_event' and @corresp]" 
     use="@corresp"></xsl:key>

然后我按如下方式将密钥部署到集合上(该密钥拒绝来自self::的任何不必要的回报):

  <xsl:variable name="correspvar" 
     select="self::seg[@type='dep_event' and @corresp]/@corresp"/>

  <xsl:value-of select="$coll/(key('correspidkey',$correspvar) 
            except $correspvar)/upper-case(@id)" 
            separator=", "/>
            </xsl:element>
        </xsl:when> 

Saxon HE 9.6.07返回Content is not allowed in prolog,但我无法确定此错误的确切含义。如果我删除此行,则错误消失,文件处理正常。也许我将collection()与密钥一起使用了?

非常感谢。

1 个答案:

答案 0 :(得分:2)

错误是因为您对collection()的调用选择了格式不正确的XML文件。您可以(a)使用集合URI中的;select=*.xml过滤掉非XML文件,或者(b)使用;on-error=ignore过滤非XML文件。