XPath表达式语法验证

时间:2014-07-14 03:39:09

标签: java xml validation xpath syntax

我目前正在使用XPath开发Java项目,因为我不是XPath专家,我需要找到一种方法来验证随机XPath表达式的语法,而不是将它们与XML数据相匹配。

我在网上发现了很多XPath验证器,不幸的是它们都需要XML数据。

我迫切需要验证以下表达式:

/cXML/Request/OrderRequest/OrderRequestHeader/Extrinsic/@name[NameOrder]/Name

我非常感谢对这一具体内容的有效性的评论...

2 个答案:

答案 0 :(得分:3)

“由于您不是XPath专家”,您在XPath表达式中所犯的大多数错误可能不是语法错误,而是语义错误。遗憾的是,XPath表达式中的大多数错误都不会被检测为语法错误甚至是运行时错误,而只会导致错误的答案。 (在这方面,XPath与正则表达式非常相似。)

你的例子就是一个很好的例子。它在语法上是有效的,但永远不会选择任何东西。那是因为它包含步骤@name[NameOrder],它选择具有NameOrder子元素的所有“name”属性。属性永远不会有子节点,所以没有什么能满足这个表达式。 Saxon会给你一个警告,但这不是语法错误。

因此,我认为您进行语法验证的方法对您没有多大帮助。

答案 1 :(得分:2)

我假设您要验证语法,但是如果表达式在xml或xml架构的上下文中有效,则不会。您可以使用compile(..)方法,如果xpath在语法上不正确,它将抛出异常。

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//book[author='Abc']/title/text()");