升级 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>  

【问题讨论】:

是的, 中有 xpath-default-namespace 【参考方案1】:

表达式 $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 中它将创建一个具有布尔值的数组序列。

【讨论】:

我的错,原来的代码是。在此处添加问题时,它已被添加。 @Sumit,也许添加一些更精确的信息,说明您想要的结果,您之前使用的 XSLT 处理器的版本。使用&lt;xsl:param name="key" select="'results'"/&gt; 和表达式$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 后失败

升级后 HSQLDB 命令行关闭不再起作用