'getElement (s) By' в PHP-классе SimpleXML, как в PHP-DomDocument?

Я сделал приложение с использованием DomDocument & SimpleXML, но сервер не поддерживает DomDocument (Only SimpleXML). Теперь я переписываю его, но в SimpleXML нет никаких функций, таких как «getElementsByTagName» и «getElementById» (мне нужны только эти 2). Я много искал на php.net и google.com, но не могу найти его.

Я не так хорош, чтобы писать свои собственные. Итак, кто-нибудь знает альтернативный / function / tip / script для меня? 🙂

Заранее спасибо.

К счастью, если SimpleXML не поддерживает эти DOM-методы, он поддерживает XPath с помощью SimpleXMLElement::xpath() .

И поиск по имени тега или id с запросом XPath не должен быть слишком сложным.
Я полагаю, что такие запросы, как тезисы, должны делать трюк:

  • поиск по id: //*[@id='VALUE']
  • поиск по имени тега: //TAG_NAME


Например, со следующей частью XML и кода для ее загрузки:

 $str = <<<STR <xml> <a id="plop">test id</a> <b>hello</b> <a>a again</a> </xml> STR; $xml = simplexml_load_string($str); 

Вы можете найти один элемент по id="plop" с чем-то вроде этого:

 $id = $xml->xpath("//*[@id='plop']"); var_dump($id); 

<a> все теги <a> с этим:

 $as = $xml->xpath("//a"); var_dump($as); 

И выход будет следующим:

 array 0 => object(SimpleXMLElement)[2] public '@attributes' => array 'id' => string 'plop' (length=4) string 'test id' (length=7) array 0 => object(SimpleXMLElement)[3] public '@attributes' => array 'id' => string 'plop' (length=4) string 'test id' (length=7) 1 => object(SimpleXMLElement)[4] string 'a again' (length=7)