在php中验证xpath语法的正确性


Validate xpath syntax correctness in php

我有一个给定的xpath,没有xml文档来尝试和测试它,但我仍然必须确保xpath的格式正确。

两个例子如下:

正确语法:'//BuyerCookie/儿童/孙子女'

语法不正确:"/foo/bar/@baz/@boy"

我需要检查是否传入了正确或不正确的xpath字符串。有什么建议吗?

基本上exta与这个问题相同:

XPath表达式语法验证

但是PHP解决方案。

如果在xpath选择器中使用DOMXPATH::query($xpath)进行测试,如果xpath无效,它将返回FALSE。

所以,我会尝试:

$doc = new DOMDocument;
$xpath = new DOMXPath($doc);
// this one is good
$str="//a//li/div[@class='foo']";
assert($xpath->query($str) !== false);
// this one is bad
$str="//a/@@bob/uncle";
assert(@$xpath->query($str) === false);

另请参阅:http://us2.php.net/manual/en/domxpath.query.php

请注意,当您在格式错误的xpath上运行$xpath->query()时,还会收到PHP警告;我在最后一行加了一个@,这样你就看不到它们了。

最后,有一件事:您给出的无效的xpath——/foo/bar/@baz/@boy——实际上并不是无效的。