我正试图在Mule中运行下面的XPath表达式。它让我犯了一个又一个错误。有人能帮我纠正这些Mule XPath表达式吗:
<xm:namespace-manager includeConfigNamespaces="true">
<xm:namespace prefix="acord" uri="ACORD.org/Standards/Life/2" />
<xm:namespace prefix="soap" uri="schemas.xmlsoap.org/soap/envelope/" />
</xm:namespace-manager>
<set-variable variableName="pwaHolding"
value="#[xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc = '37']/@OriginatingObjectID').value" />
<set-variable variableName="pwaPolNumber"
value="#[xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Holding[@id=$pwaHolding]/acord:Policy/acord:PolNumber').text]" />
当我尝试执行上面的XPATH表达式时,出现以下异常:
Message :Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String
Code : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. [Error: unexpected token: 37]
[Near : {... @tc == '37']/@OriginatingObjec ....}]
^
[Line: 1, Column: 96] (org.
mvel2.CompileException)
org.mvel2.compiler.ExpressionCompiler:247 (null)
2. Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException)
org.mule.el.mvel.MVELExpressionLanguage:211 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html)
3. Execution of the expression "xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc == '37']/@OriginatingObjectID').value" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String (org.mule.api.transformer.TransformerMessagingException)
org.mule.transformer.AbstractTransformer:123 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerMessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
[Error: unexpected token: 37]
[Near : {... @tc == '37']/@OriginatingObjec ....}] ^
[Line: 1, Column: 96]
at org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:247)
at org.mvel2.util.ParseTools.subCompileExpression(ParseTools.java:1944)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:862)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
你好,大卫,
即使用"
替换了'
,我仍然会出现以下错误:
消息:执行表达式"xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc=='37']/@OriginatingObjectID').value"失败。(org.mule.api.exexpression.ExpressionRuntimeException)。消息负载的类型为:String代码:MULE_ERROR--2--------------------------------------------------------------------------------异常堆栈为:1.[错误:意外令牌:37][附近:{…@tc=='37']/@OriginangObjec……}]^[行:1,列:96](org.mvel2.CompileException)org.mvel2.compiler.ExpressionCompiler:247(null)2.执行表达式"xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc=='37']/@OriginatingObjectID').value"失败。(org.mule.api.expression.ExpressionRuntimeException)org.mule.el.mwel.mvel表达语言:211(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html)3.执行表达式"xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc=='37']/@OriginatingObjectID').value"失败。(org.mule.api.exexpression.ExpressionRuntimeException)。消息负载的类型为:String(org.mule.api.transformer.TransformerMessagingException)org.mule.transformer.AbstractTransformer:123(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerMessagingException.html)
我的第二个XPATH表达式也有问题,它也失败了。也请帮我绕过这个
错误来自于在由'
分隔的字符串中使用'
,这是不起作用的。例如,在以下表达式中,问题围绕'37'
:
value="#[xpath('//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc = '37']/@OriginatingObjectID').value" />
另一个问题是MEL表达式末尾缺少一个闭合]
。
试用:
value="#[xpath("//acord:TXLife/acord:TXLifeRequest/acord:OLifE/acord:Relation[acord:RelationRoleCode/@tc = '37']/@OriginatingObjectID").value" />
看看您的第二个XPath,我看到了[@id=$pwaHolding]
。我假设此时您正在尝试使用由第一个XPath提取的pwaHolding
流变量。这将不起作用,因为MVEL没有字符串插值。您需要使用串联,顺便说一句,不要忘记对@id
的值进行单引号比较:
[@id='" + pwaHolding + "']