Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XPath表达式语法验证_Java_Xml_Validation_Xpath_Syntax - Fatal编程技术网

Java XPath表达式语法验证

Java XPath表达式语法验证,java,xml,validation,xpath,syntax,Java,Xml,Validation,Xpath,Syntax,我目前正在从事一个使用XPath的Java项目,由于我不是XPath专家,我需要找到一种方法来验证随机XPath表达式的语法,而不必将它们与XML数据匹配 我在web上发现了许多XPath验证器,不幸的是,它们都需要XML数据 我的当务之急是验证以下表达式: /cXML/Request/OrderRequest/OrderRequestHeader/Extrinsic/@name[NameOrder]/Name 我希望您能对这个特定表达式的有效性发表评论…我假设您希望验证语法,但如果表达式在x

我目前正在从事一个使用XPath的Java项目,由于我不是XPath专家,我需要找到一种方法来验证随机XPath表达式的语法,而不必将它们与XML数据匹配

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

我的当务之急是验证以下表达式:

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

我希望您能对这个特定表达式的有效性发表评论…

我假设您希望验证语法,但如果表达式在xml或xml模式的上下文中有效,则不需要验证。您可以使用该方法,如果xpath语法不正确,它将抛出异常

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

我假设您想验证语法,但不想验证表达式在xml或xml模式的上下文中是否有效。您可以使用该方法,如果xpath语法不正确,它将抛出异常

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//book[author='Abc']/title/text()");
“因为您不是XPath专家”,您在XPath表达式中犯的大多数错误可能不是语法错误,而是语义错误。遗憾的是,XPath表达式中的大多数错误都不会被检测为语法错误甚至运行时错误,只会导致错误的答案。(XPath在这方面与正则表达式非常相似。)

你的例子就是一个很好的例子。它在语法上是有效的,但不会选择任何内容。这是因为它包括步骤
@name[NameOrder]
,该步骤选择所有具有NameOrder子元素的“name”属性。属性从来没有子级,因此没有任何内容满足此表达式。Saxon会给你一个警告,但不是语法错误

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

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

你的例子就是一个很好的例子。它在语法上是有效的,但不会选择任何内容。这是因为它包括步骤
@name[NameOrder]
,该步骤选择所有具有NameOrder子元素的“name”属性。属性从来没有子级,因此没有任何内容满足此表达式。Saxon会给你一个警告,但不是语法错误


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

谢谢Michael,事实上这相当令人惊讶:XPath标准允许XPath表达式永远不会选择任何数据。在这方面,我的探索肯定没有多大意义……谢谢Michael,这实际上相当令人惊讶:XPath标准允许XPath表达式永远不会选择任何数据。在这方面,我的任务肯定没有多大意义…谢谢,很高兴知道。因此,我的探索实际上到此结束:这就是我正在寻找的验证器,它将告诉我语法是否正确,但不幸的是,它永远不会告诉我表达式是否真的有意义,正如Michael指出的那样……谢谢,很高兴知道。因此,我的探索实际上到此结束:这就是我正在寻找的验证器,它将告诉我语法是否正确,但不幸的是,它永远不会告诉我表达式是否真的有意义,正如Michael指出的那样。。。