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属性。