【发布时间】:2020-10-20 21:00:13
【问题描述】:
我有 XSL 语句,当它作为 XSL 转换运行时,出现以下错误-
2020-06-30 18:29:24.307 INFO 23756 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
Error evaluating ($trackCountryOfOrigin = 0 or $trackCountryOfOrigin = "N" or $trackCountryOfOrigin = "") in xsl:when/@test on line 103 column 123 of WMOSToSC2020_Item.xsl:
FORG0001: Cannot convert string "N" to double
; SystemID: file:/C:/SCPP20/scpp-sc2020-interface-migration-master@3ec266adf36/./xslt/WMOSToSC2020_Item.xsl; Line#: 103
ValidationException: Cannot convert string "N" to double
at net.sf.saxon.type.ValidationFailure.makeException(ValidationFailure.java:392)
at net.sf.saxon.type.ValidationFailure.asAtomic(ValidationFailure.java:417)
at net.sf.saxon.expr.sort.UntypedNumericComparer.quickComparison(UntypedNumericComparer.java:158)
at net.sf.saxon.expr.sort.UntypedNumericComparer.quickCompare(UntypedNumericComparer.java:58)
at net.sf.saxon.expr.GeneralComparison.compare(GeneralComparison.java:829)
at net.sf.saxon.expr.GeneralComparison.evaluateManyToOne(GeneralComparison.java:704)
at net.sf.saxon.expr.GeneralComparison.effectiveBooleanValue(GeneralComparison.java:651)
at net.sf.saxon.expr.OrExpression.effectiveBooleanValue(OrExpression.java:133)
at net.sf.saxon.expr.OrExpression.effectiveBooleanValue(OrExpression.java:133)
at net.sf.saxon.expr.instruct.Choose.choose(Choose.java:917)
at net.sf.saxon.expr.instruct.Choose.processLeavingTail(Choose.java:892)
at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:721)
at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:721)
at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:721)
at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:721)
at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:132)
at net.sf.saxon.expr.LetExpression.process(LetExpression.java:608)
at net.sf.saxon.expr.instruct.ForEach.lambda$processLeavingTail$0(ForEach.java:484)
at net.sf.saxon.om.SequenceIterator.forEachOrFail(SequenceIterator.java:128)
at net.sf.saxon.expr.instruct.ForEach.processLeavingTail(ForEach.java:484)
at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
at net.sf.saxon.expr.instruct.TemplateRule.applyLeavingTail(TemplateRule.java:349)
at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:485)
at net.sf.saxon.trans.XsltController.applyTemplates(XsltController.java:733)
at net.sf.saxon.s9api.AbstractXsltTransformer.applyTemplatesToSource(AbstractXsltTransformer.java:348)
at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:341)
这是我的 xsl 声明-
<xsl:variable name="trackCountryOfOrigin" select="LotReq"/>
<xsl:choose><xsl:when test="$trackCountOfOrg=0 or $trackCountOfOrg='N' or $trackCountOfOrg=''">"trackCountOfOrg": 0,
</xsl:when></xsl:choose>
这里是输入 xml-
<LotReq>N</LotReq>
注意- - 此标签可以填充 N 或 0。 我们正在使用 Saxon 处理器使用 XSL 转换此 XML。
【问题讨论】:
-
那么你在哪里将哪个值精确地绑定到变量
trackCountOfOrg?当它看起来是一个双数但你想将它与字符串N进行比较时,你想要执行什么样的比较? -
在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:stackoverflow.com/help/minimal-reproducible-example 请编辑您的原始帖子并提供以下内容:(1)输入 XML(2)您的逻辑,以及您尝试实现的 XSLT。 (3) 期望的输出。
-
@MartinHonnen 我编辑了我的问题。
-
你为什么不干脆把
$trackCountOfOrg=0改成$trackCountOfOrg='0'? -
@michael.hor257k 是的,这很有帮助。谢谢!