Использование PHP simpleXML для поиска узла, имя которого я знаю, но не там, где он находится - PullRequest
2 голосов
/ 01 декабря 2011

Мне нужно запросить XML-строку в PHP, где я знаю имена узлов, которые я ищу, но не обязательно знаю путь к узлу.

Я думаю, что могу сделать это с помощью xpath, но я не могу понять, как настроить относительный путь для просмотра в любом месте документа, кто-то может указать мне правильное направление.

В настоящее время я пытаюсь добиться этого с помощью SimpleXML, но если есть лучший способ сделать это, я бы хотел услышать это.

Ответы [ 3 ]

11 голосов
/ 01 декабря 2011

Не используйте регулярные выражения для разбора XML!

Оператор Потомок (двойная косая черта) в xpath будет искать совпадения для всех потомков.

$matches = $simplexmlelementobject->xpath('//nameOfElement');

Выше эквивалентно методу DOM getElementsByTagName

Если у вас есть общее представление о том, где находится элемент, вы можете использовать оператор-потомок для поиска ниже определенного узла:

$matches = $simplexmlelementobject->xpath('someparentelement[@conditionalattr=something]//nameOfDescendantElementYouWant');

Если вам нужно использовать DOMDocument вместо SimpleXML, вы можете при необходимости выполнить инструкции xpath с объектом DOMXPath. (Оставлено как упражнение для читателя.)

1 голос
/ 01 декабря 2011

Хотя я думаю, что использование xpath simplexml действительно легко и эффективно для этого, в случае, если у вас есть что-то еще, вы можете найти некоторые из этих альтернатив более знакомыми, поскольку они используют селекторы dom или css вместо xpath.

http://code.google.com/p/phpquery/

http://querypath.org/

http://www.php.net/manual/en/domelement.getelementsbytagname.php

0 голосов
/ 01 декабря 2011

Я не совсем уверен, как выглядит структура XML, но я использовал это сообщение в блоге , чтобы помочь с некоторыми проблемами, с которыми я столкнулся при разборе XML.Кажется, это объясняет основы, плюс всегда обращайтесь к php.net

Я надеюсь, что это помогает, но, не видя полной проблемы, я не могу полностью ответить на вопрос.

...