Spring int-xml:带路径函数的xpath-expression错误

我使用XMLSpy编写以下XPath来确定最长的字符串长度,它在XMLSpy中工作:

string-length(//exception:ElementMessageAbcException/@exceptionMsg[not(string-length(.) < //exception:ElementMessageAbcException/@exceptionMsg/string-length(.))] ) 

但是当我在Spring集成中将相同的字符串放入xpath-expression时,它会出错:

org.springframework.beans.factory.BeanCreationException:创建名为’xpathMaxLengthExceptionMsg’的bean时出错:bean的实例化失败; 嵌套exception是org.springframework.beans.factory.BeanDefinitionStoreException:工厂方法[public static org.springframework.xml.xpath.XPathExpression org.springframework.xml.xpath.XPathExpressionFactory.createXPathExpression(java.lang.String,java.util.Map)抛出java.lang.IllegalStateException,org.springframework.xml.xpath.XPathParseException]抛出exception; 嵌套exception是org.springframework.xml.xpath.XPathParseException:无法编译[//exception:MarkitMessageAciException / @ exceptionMsg [not(string-length()<//异常:MarkitMessageAciException / @ exceptionMsg / string-length())]到XPathExpression:null; 嵌套异常是javax.xml.xpath.XPathExpressionException引起:javax.xml.transform.TransformerException:未知nodetype:string-length

            

示例XML:

      

我不知道XML Spy是如何工作的,但我看到了这个:

 /@exceptionMsg/string-length(.) 

是一个错误的语法。 string-length()实际上是一个xPath function ,但它不是XML的节点。

目前尚不清楚你的目标是什么,但我希望它能够有所帮助。

UPDATE

好吧,我已经弄清楚发生了什么。

您使用XPath 2 ( 如何使用XPath 选择具有最长子#text节点值的XML节点? ),但Java默认情况下不具备该function。

所以你应该使用其他一些库。 撒克逊人是这方面最好的人。

但是你应该这样做:

 -Djavax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom=net.sf.saxon.xpath.XPathFactoryImpl 

或者以编程方式指定System属性。