我有一个带有document()函数的样式表。当我在.Net上使用saxon的转换运行它时,它会找到外部文档,但当我使用java -jar saxon运行它时,它就找不到了……
请告诉我,这是记录良好的行为,在哪里记录的!
谢谢你们!

编辑:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<root>
<xsl:variable name="dict" select="document('file:../data/mpxvoc.xml')"/>
<xsl:message>
<xsl:value-of select="doc-available('file:../data/mpxvoc.xml')"/>
<xsl:value-of select="$dict/*/*[1]"/>
</xsl:message>
</root>
</xsl:template>
</xsl:stylesheet>EDIT2:是的,相同的版本!
EDIT3:.NET/transform上-t输出的开始
C:\Users\mauri\OneDrive\smbdata\EM\SM-Plains\20200806>transform -t -s:2-MPX\vfix.mpx -xsl:C:\Users\mauri\eclipse-workspace\Pipeline\xsl\dtest.xsl -o:o.xml
Saxon-HE 9.9.1.6N from Saxonica
.NET 4.0.30319.42000 on Microsoft Windows NT 6.2.9200.0
URIResolver.resolve href="file:/C:/Users/mauri/eclipse-workspace/Pipeline/xsl/dtest.xsl" base="null"
Stylesheet compilation time: 1.25987s (1259.87ms)
Processing file:/C:/Users/mauri/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx
Using parser org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:///C:/Users/mauri/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 222.8786ms
Tree size: 42580 nodes, 902487 characters, 26182 attributes
Building tree for file:///C:/Users/mauri/eclipse-workspace/Pipeline/data/mpxvoc.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 59.3813ms
Tree size: 20788 nodes, 725994 characters, 10214 attributes..。
Java版本:
C:\Users\mauri\OneDrive\smbdata\EM\SM-Plains\20200806>java -jar "C:\Program Files\Saxonica\SaxonHE10-2J\saxon-he-10.2.jar" -t -s:2-MPX\vfix.mpx -xsl:C:\Users\mauri\eclipse-workspace\Pipeline\xsl\dtest.xsl -o:o.xml
Saxon-HE 10.2J from Saxonica
Java version 1.8.0_261
Stylesheet compilation time: 635.9066ms
Processing file:/C:/Users/mauri/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/C:/Users/mauri/OneDrive/smbdata/EM/SM-Plains/20200806/2-MPX/vfix.mpx using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 348.0487ms
Tree size: 42580 nodes, 902487 characters, 26182 attributes
URIResolver.resolve href="file:../data/mpxvoc.xml" base="file:/C:/Users/mauri/eclipse-workspace/Pipeline/xsl/dtest.xsl"
falseError FODC0002 while evaluating xsl:message at line 12 of file:/C:/Users/mauri/eclipse-workspace/Pipeline/xsl/dtest.xsl: Document has been marked not available: file:../data/mpxvoc.xml
Execution time: 414.5074ms
Memory used: 62MbURIResolver显示了不同的碱基。这就是问题所在,在java中有没有快速修复的方法来获得同样的结果?
发布于 2020-10-24 05:07:00
根据RFC8089,URI file:../data/mpxvoc.xml不是有效的URI。但是,Saxon对URI采取了一种自由的方法,在这种上下文中,它将URI“按原样”传递给XML解析器,如果解析器准备接受它,那也没问题。在这一点上,平台之间的差异很可能会出现。
解决方案是避免使用不符合标准的URI。如果希望根据样式表的基URI解析相对URI,则删除"file:“部分。
RFC 8089在2017年才发布,在此之前,文件URI方案的规范是无可救药的模糊。2017年的规范来得太晚了,无法产生真正的影响,因为到那时,像Java和.NET这样的现有平台必须保持与各自过去的决定的兼容性。但是如果你坚持使用RFC8089,你应该能够实现合理的可移植性。
https://stackoverflow.com/questions/64504817
复制相似问题