2014-09-18 5 views
0

У меня есть заданный xpath без XML-документа, чтобы попробовать его протестировать, но мне все равно нужно убедиться, что xpath правильно отформатирован.Проверить правильность синтаксиса xpath в php

Два примера следующим образом:

ПРАВИЛЬНО СИНТАКСИС: '// BuyerCookie/ребенок/внучат'

НЕПРАВИЛЬНЫЙ СИНТАКСИС: "/ Foo/бар/@ Baz/@ мальчик"

Мне нужно проверить, была ли передана правильная или некорректная строка xpath. Любые предложения?

В основном эти Exta же вопросы, как этот:

XPath expression syntax validation

Но PHP решение.

+0

Если у вас нет конкретного XML-теста для тестирования, то почему бы вам не протестировать с помощью _any_ хорошо сформированного документа и посмотреть ответ? –

ответ

0

Похоже, если вы используете DOMXPATH :: query ($ xpath) с вашим селектором XPath для тестирования, он вернет FALSE, если XPath недействителен.

Итак, я хотел бы попробовать:

$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, вы также получите PHP предупреждения; Я положил @ в последней строке, чтобы вы их не увидели.

И, наконец, одно: xpath вы укажете как недействительный - /foo/bar/@baz/@boy - на самом деле недействителен.

+0

Спасибо @romulusnr, это прекрасно работает! Также спасибо за исправление моей ошибки в '/ foo/bar/@ baz/@ boy' :) – vternal3

+0

Я только что проверил свой тест и обнаружил, что на самом деле/​​foo/bar/@ baz/@ boy - недопустимый случай. Я получаю false из запроса() return. – vternal3

+0

Это интересно. Я получаю: '$ php -r '$ doc = new DOMDocument; $ xpath = new DOMXPath ($ doc); $ Ул = "/ Foo/бар/@ Baz/@ мальчик"; var_dump ($ xpath-> запрос ($ строка)); ' ' ' объект (DOMNodeList) # 3 (1) { [ "длина"] => Int (0) } ' Интересно, если это проблема с версией. Я использую PHP 5.3.26 (да, я знаю, это работа). – romulusnr

Смежные вопросы