'getElement (s) By' в PHP-классе SimpleXML, как в PHP-DomDocument? - PullRequest
4 голосов
/ 26 марта 2011

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

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

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

Ответы [ 2 ]

7 голосов
/ 26 марта 2011

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

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

  • поиск по идентификатору: //*[@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> с этим:

$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)
1 голос
/ 26 марта 2011
...