命名空间的Spring Spel XPATH表达式,但没有前缀

命名空间的Spring Spel XPATH表达式,但没有前缀,spring,xpath,spring-el,Spring,Xpath,Spring El,问题:尝试使用SpEL XPATH构建正确的XPATH,以便在根标记具有名称空间但没有前缀的“Name”标记值上进行关联 错误:意外的令牌。应为“rparen()”,但为“标识符” 它在抱怨';在这里,我试图为xpath计算提供一个引用 XML 解决方案: 正确的字符串文字: -您可以看到它现在是正确的,因为标记化过程将所有内容都放在字符串文本标记中 [[HASH(#)](0,1), [IDENTIFIER:xpath](1,6), [LPAREN(()](6,7), [IDENTIFI

问题:尝试使用SpEL XPATH构建正确的XPATH,以便在根标记具有名称空间但没有前缀的“Name”标记值上进行关联

错误:意外的令牌。应为“rparen()”,但为“标识符” 它在抱怨';在这里,我试图为xpath计算提供一个引用

XML

解决方案:

正确的字符串文字: -您可以看到它现在是正确的,因为标记化过程将所有内容都放在字符串文本标记中

[[HASH(#)](0,1), [IDENTIFIER:xpath](1,6), [LPAREN(()](6,7), [IDENTIFIER:payload](7,14), [COMMA(,)](14,15), [LITERAL_STRING:'//*[local-name()=''Name'']/text()'](16,56), [RPAREN())](56,57)]
其他调试注释:

在此处拉出弹簧git时:

  • 以所有的项目为例
  • 根目录是“import=into eclipse.bat”或“import-into idea”,我没有看到。您可以执行该操作来完全构建和签出本地需要的所有内容,并导入项目,以便跟踪问题

  • 发布的表达式将生成无效的XPath。它应该在
    /text()
    前面加上右方括号:

    '//*[local-name()='Name']/text()'
    
    或者可能使用双单引号进行转义,建议如下:


    我尝试了以上两种方法,但仍然得到相同的错误。我知道我可能错过了一些小东西。试图在spring中找到一个使用local-name()的xpath表达式,但还没有找到一个示例。我把复制和粘贴弄得一团糟,直到我在春季追踪到标记化过程时才意识到这一点。啊。哦,追踪起来很有趣。
    this.expressionString = "#xpath(payload, '//*[local-name()=Name]')"//This works
    [[HASH(#)](0,1), [IDENTIFIER:xpath](1,6), [LPAREN(()](6,7), [IDENTIFIER:payload](7,14), [COMMA(,)](14,15), [LITERAL_STRING:'//*[local-name()=Name]'](16,45), [RPAREN())](45,46)]
    
    
    this.expressionString = "#xpath(payload, '//*[local-name()='Name']')"//Thisfails
    [[HASH(#)](0,1), [IDENTIFIER:xpath](1,6), [LPAREN(()](6,7), [IDENTIFIER:payload](7,14), [COMMA(,)](14,15), [LITERAL_STRING:'//*[local-name()='](16,35), [IDENTIFIER:Name](35,44), [LITERAL_STRING:']'](44,47), [RPAREN())](47,48)]
    
    correlation-strategy-expression="#xpath(payload, '//*[local-name()=''Name'']/text()')"
    
    [[HASH(#)](0,1), [IDENTIFIER:xpath](1,6), [LPAREN(()](6,7), [IDENTIFIER:payload](7,14), [COMMA(,)](14,15), [LITERAL_STRING:'//*[local-name()=''Name'']/text()'](16,56), [RPAREN())](56,57)]
    
    '//*[local-name()='Name']/text()'
    
    '//*[local-name()=''Name'']/text()'