升级 saxon-he-10.5 JAR 后,面临转型问题
Posted
技术标签:
【中文标题】升级 saxon-he-10.5 JAR 后,面临转型问题【英文标题】:After upgrading saxon-he-10.5 JAR, facing issue in the transformation 【发布时间】:2021-09-25 05:09:14 【问题描述】:我有两个 XSL 文件,一个 XSL 导入另一个,
在变量数据中没有得到任何值。我在下面使用的变量数据来获取属性。由于数据为空。没有从中获得价值。这行有什么问题吗
XSL 1:Veichle.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="Motor.xsl"/>
<xsl:output omit-xml-declaration="yes" method="xml" />
<xsl:param name="key" select="'vita'"/>
</xsl:transform>
XSL 2:Motor.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f1="urn:hl7-org:v3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cda="urn:hl7-org:v3"
xmlns:sdtc="urn:hl7-org:sdtc" xpath-default-namespace="http://hl7.org/fhir"
xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:lookup="http://lookup.data"
xmlns:uuid="java:java.util.UUID" exclude-result-prefixes="fn lookup uuid sdtc cda xsl xsi f1">
<xsl:import href="section.xsl"/>
<xsl:output omit-xml-declaration="yes" method="xml"/>
<xsl:param name="key" select="'results'"/>
<xsl:param name="mostRecent" select="false()"/>
<xsl:variable name="header">
</xsl:transform>
【问题讨论】:
是的,表达式 $header/sections/code/[@key=$key]
在 XPath 1.0、2.0 或 3.0 中无效。在 XPath 3.1 中,它有一个含义(它返回一个数组),但这并不是您认为的含义。正如 Martin 解释的那样,您可能打算使用 $header/sections/code[@key=$key]
,但我不知道为什么您以前的 XSLT 处理器没有标记错误。
【讨论】:
是的,原来的代码有$header/sections/code[@key=$key],我这里加错了 好吧,据我所知,$data
变量没有在您的转换中使用,所以还有一些事情您没有告诉我们。我们无法解决信息不完整的问题。
之前我给出了根本原因所在的代码,我已经添加了一段代码,我们试图从变量数据中获取一个元素。
您现在需要修复 Martin Honnen 确定的命名空间问题。【参考方案2】:
除了评论中指出的命名空间问题,即设置xpath-default-namespace="http://hl7.org/fhir"
,您想从该命名空间中选择元素,代码中的另一个错误是在$header/sections/code/[@key=$key]
部分,您可能需要@987654323 @,即code
元素的最后一步的布尔谓词。
如果您真的从 XSLT 1 或 2 升级到 Saxon 10,那么我认为对于较旧的处理器,您的表达式应该会给您一个错误,而在 XSLT 3 中它将创建一个具有布尔值的数组序列。
【讨论】:
我的错,原来的代码是<xsl:param name="key" select="'results'"/>
和表达式$header/sections/code[@key=$key]
我看不出如何选择code key="engine"
或code key="exterior"
。
我们正在使用的 XSLT 2.0。相同的代码适用于 Saxon HE 9.x 。当我按照 Saxonica 的建议在本地或通过命令提示符运行此程序时,转换工作正常。但是我在服务器(Jboss)上运行它时遇到了这个问题。以上是关于升级 saxon-he-10.5 JAR 后,面临转型问题的主要内容,如果未能解决你的问题,请参考以下文章
将 xcode 升级到 10.2 版后面临 AFNetworking 错误
升级到 Mac OSX Sierra 时面临 mcrypt 错误问题
在 oracle 模式下升级 h2 数据库 jar 后选择语句失败
将 Spring Boot 从 2.4.X 升级到 2.6.X 后无法运行我的 jar
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean 升级 spring–orm jar 到 4.1.6 后失败