有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java外部函数调用saxon 9.9he xslt

我们正在使用xalan进行xml转换。现在,为了支持xslt 3.0并提高性能,我们正在迁移到saxon 9.9 HE

当前代码

Java代码

  HashMap<String, String> columnPropsMap= getProperties(strDSNName);

  transformer.setParameter("propsMap", columnPropsMap);//set map to xslt

 **XSLT**
 ...xmlns:map="xalan://java.util.Map" extension-element-prefixes="map"
 ...<xsl:param name="propsMap"/> <!--read map passed from java-->
 ...<xsl:variable name="defaultvalue"  select="map:get($propsMap,translate($udpname,$lowercase,$uppercase))"/><!-- retrieve the property for udp(property) by udpname from  hashmap propsMap-->



    **New code**

  **java**
  System.setProperty("javax.xml.transform.TransformerFactory",
             "net.sf.saxon.TransformerFactoryImpl");//set saxon transformer factory

  **XSLT**

  xmlns:map="http://ns.saxonica.com/map" extension-element-prefixes="map"<!--namespace change-->

下面是一个涉及地图的错误行:get($propsMap,translate($udpname,$lowercase,$uppercase))。我相信9.9他不支持外部通话功能。或者,我们需要使用ExtensionFunctionDefinition的自定义函数。无法理解如何读取地图和设置值

请求建议如何在SAxon 9.9中处理xslt中的映射参数

错误堆栈跟踪

Error evaluating ((element()[fn:name(...) eq "UDP_Instance_Groups"])/element()[fn:name(...) eq "UDP_Instance"]!let $udpval := ...) in xsl:variable/@select on line 953 column 113 
  XTDE1425: Cannot find a 2-argument function named Q{http://ns.saxonica.com/map}get()
     invoked by unknown caller (class net.sf.saxon.expr.instruct.ForEach) at #947
     invoked by unknown caller (class net.sf.saxon.expr.instruct.ForEach) at #568
  In template rule with match="*[fn:name(...) eq "Physical_Columns_Order_Ref"]" on line 565 of 
     invoked by xsl:apply-templates at #509
     invoked by unknown caller (class net.sf.saxon.expr.instruct.ForEach) at #81
  In template rule with match="/" on line 38 of 
   ; SystemID: ; Line#: 953; Column#: 60
  net.sf.saxon.trans.XPathException: Cannot find a 2-argument function named   Q{http://ns.saxonica.com/map}get()
    at net.sf.saxon.expr.ErrorExpression.evaluateItem(ErrorExpression.java:149)
    at net.sf.saxon.expr.parser.Evaluator$5.evaluate(Evaluator.java:191)
    at net.sf.saxon.expr.parser.Evaluator$5.evaluate(Evaluator.java:188)
    at net.sf.saxon.expr.LetExpression.eval(LetExpression.java:532)
    at net.sf.saxon.expr.LetExpression.process(LetExpression.java:601)
    at net.sf.saxon.expr.instruct.ForEach.lambda$processLeavingTail$0(ForEach.java:484)
    at net.sf.saxon.expr.instruct.ForEach$$Lambda$51/1933790033.accept(Unknown Source)
    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.Instruction.process(Instruction.java:132)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
    at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:723)
    at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
    at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:723)
    at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
    at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:723)
    at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
    at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:723)
    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.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:723)
    at net.sf.saxon.expr.instruct.Choose.processLeavingTail(Choose.java:896)
    at net.sf.saxon.expr.instruct.Choose.processLeavingTail(Choose.java:896)
    at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:132)
    at net.sf.saxon.expr.instruct.ForEach.lambda$processLeavingTail$0(ForEach.java:484)
    at net.sf.saxon.expr.instruct.ForEach$$Lambda$51/1933790033.accept(Unknown Source)
    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.LetExpression.processLeavingTail(LetExpression.java:723)
    at net.sf.saxon.expr.instruct.TemplateRule.applyLeavingTail(TemplateRule.java:352)
    at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:533)
    at net.sf.saxon.expr.instruct.ApplyTemplates.apply(ApplyTemplates.java:300)
    at net.sf.saxon.expr.instruct.ApplyTemplates.process(ApplyTemplates.java:251)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:735)
    at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:723)
    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.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    at net.sf.saxon.expr.instruct.Choose.processLeavingTail(Choose.java:896)
    at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:132)
    at net.sf.saxon.expr.instruct.ForEach.lambda$processLeavingTail$0(ForEach.java:484)
    at net.sf.saxon.expr.instruct.ForEach$$Lambda$51/1933790033.accept(Unknown Source)
    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.Instruction.process(Instruction.java:132)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    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.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    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.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    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.instruct.ElementCreator.processLeavingTail(ElementCreator.java:352)
    at net.sf.saxon.expr.instruct.ElementCreator.processLeavingTail(ElementCreator.java:299)
    at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:723)
    at net.sf.saxon.expr.instruct.TemplateRule.applyLeavingTail(TemplateRule.java:352)
    at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:533)

共 (1) 个答案