【发布时间】:2018-10-22 12:52:22
【问题描述】:
我在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() 和密钥?
非常感谢。
【问题讨论】:
-
您是否从命令行运行 Saxon?或者在任何 Java 代码中?您是否有任何集合解析器应该将您的 URI
file:///Users/username/foopath映射到这些文档?如果您从命令行或 Java 使用普通的 Saxon,则标准解析器使用例如从file:///Users/username/foopath目录加载所有“*.xml”文件将是collection('file:///Users/username/foopath?select=*.xml')。 -
我正在使用 Oxygen 编写和测试 XSL 和 XML,它最初抛出了错误 - 添加
?select=*.xml解决了它。现在我知道撒克逊人不喜欢获取非 XML 或者更确切地说是不可处理的文件。对于 Oxygen 来说,这个过程太大了,所以我把它扔到了命令行中。