'getElement(s)By' in the PHP class SimpleXML like in PHP-DomDocument?

前端 未结 2 606
悲哀的现实
悲哀的现实 2021-01-19 21:33

I have made a application using DomDocument & SimpleXML, but the server doesn\'t support DomDocument (Only SimpleXML). Now I am rewriting it, but there aren\'t any funct

相关标签:
2条回答
  • 2021-01-19 22:09

    Use XPath. http://www.php.net/manual/en/simplexmlelement.xpath.php

    0 讨论(0)
  • 2021-01-19 22:11

    Happily, if SimpleXML doesn't support those DOM-methods, it supports XPath, with the SimpleXMLElement::xpath() method.

    And searching by tag name or id, with an XPath query, shouldn't be too hard.
    I suppose queries like theses should do the trick :

    • search by id : //*[@id='VALUE']
    • search by tag name : //TAG_NAME



    For example, with the following portion of XML and code to load it :

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

    You could find one element by its id="plop" with something like this :

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

    And search for all <a> tags with that :

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

    And the output would be the following one :

    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)
    
    0 讨论(0)
提交回复
热议问题