3v4l.org

run code in 300+ PHP versions simultaneously
<?php $XML = ' <html> <h1>Hello</h1> <ol> <li>test (no id)</li> <li xml:id="i2">test i2</li> </ol> </html> '; $doc = new DOMDocument; $doc->loadXML($XML); $xpath = new DOMXpath($doc); // get the ol $olNode = $xpath->evaluate('//ol[1]', NULL, FALSE)->item(0); // append a new list item $olNode->appendChild($liNode = $doc->createElement('li')); $liNode->appendChild($doc->createTextNode('test i3')); $liNode->setAttribute('xml:id', 'i3'); // show new DOM state print $doc->saveXML(); // insert a new list item before the others $olNode->insertBefore($liNode = $doc->createElement('li'), $olNode->firstChild); $liNode->appendChild($doc->createTextNode('test i0')); $liNode->setAttribute('xml:id', 'i0'); // show new DOM state print $doc->saveXML(); // fetch the li nodes without an xml:id $nodes = $xpath->evaluate('//ol/li[not(@xml:id)]', NULL, FALSE); // and remove them in reverse order for ($i = $nodes->length - 1; $i >= 0; --$i) { $nodes->item($i)->parentNode->removeChild($nodes->item($i)); } // show new DOM state print $doc->saveXML(); // replace the li[@xml:id'i2'] with a new node $liNode = $doc->getElementById('i2'); $followingNode = $liNode->nextSibling; $odNode = $liNode->parentNode; $olNode->removeChild($liNode); $olNode->insertBefore($liNode = $doc->createElement('li'), $followingNode); $liNode->appendChild($doc->createTextNode('test i2 replaced')); $liNode->setAttribute('xml:id', 'i2'); // show new DOM state print $doc->saveXML(); // NOT REFRESHING!?! var_dump($doc->getElementById('i2')); // object(DOMElement)#5 (0) { } li //CAN_NOT_doMORESomeChange($doc); $doc->loadXML($doc->saveXML()); // only way to refresh? print $doc->getElementById('i2')->tagName; //OK, is there // be ware that the xpath still uses the old document var_dump($xpath->document === $doc);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 84
Branch analysis from position: 84
2 jumps found. (Code = 44) Position 1 = 86, Position 2 = 73
Branch analysis from position: 86
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 73
2 jumps found. (Code = 44) Position 1 = 86, Position 2 = 73
Branch analysis from position: 86
Branch analysis from position: 73
filename:       /in/nYu31
function name:  (null)
number of ops:  143
compiled vars:  !0 = $XML, !1 = $doc, !2 = $xpath, !3 = $olNode, !4 = $liNode, !5 = $nodes, !6 = $i, !7 = $followingNode, !8 = $odNode
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, '%0A++%3Chtml%3E%0A++++%3Ch1%3EHello%3C%2Fh1%3E%0A++++%3Col%3E%0A++++++%3Cli%3Etest+%28no+id%29%3C%2Fli%3E%0A++++++%3Cli+xml%3Aid%3D%22i2%22%3Etest+i2%3C%2Fli%3E%0A++++%3C%2Fol%3E%0A++%3C%2Fhtml%3E%0A++'
   12     1        NEW                                              $10     'DOMDocument'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !1, $10
   13     4        INIT_METHOD_CALL                                         !1, 'loadXML'
          5        SEND_VAR_EX                                              !0
          6        DO_FCALL                                      0          
   15     7        NEW                                              $14     'DOMXpath'
          8        SEND_VAR_EX                                              !1
          9        DO_FCALL                                      0          
         10        ASSIGN                                                   !2, $14
   18    11        INIT_METHOD_CALL                                         !2, 'evaluate'
         12        SEND_VAL_EX                                              '%2F%2Fol%5B1%5D'
         13        SEND_VAL_EX                                              null
         14        SEND_VAL_EX                                              <false>
         15        DO_FCALL                                      0  $17     
         16        INIT_METHOD_CALL                                         $17, 'item'
         17        SEND_VAL_EX                                              0
         18        DO_FCALL                                      0  $18     
         19        ASSIGN                                                   !3, $18
   21    20        INIT_METHOD_CALL                                         !3, 'appendChild'
         21        INIT_METHOD_CALL                                         !1, 'createElement'
         22        SEND_VAL_EX                                              'li'
         23        DO_FCALL                                      0  $20     
         24        ASSIGN                                           ~21     !4, $20
         25        SEND_VAL_EX                                              ~21
         26        DO_FCALL                                      0          
   22    27        INIT_METHOD_CALL                                         !4, 'appendChild'
         28        INIT_METHOD_CALL                                         !1, 'createTextNode'
         29        SEND_VAL_EX                                              'test+i3'
         30        DO_FCALL                                      0  $23     
         31        SEND_VAR_NO_REF_EX                                       $23
         32        DO_FCALL                                      0          
   23    33        INIT_METHOD_CALL                                         !4, 'setAttribute'
         34        SEND_VAL_EX                                              'xml%3Aid'
         35        SEND_VAL_EX                                              'i3'
         36        DO_FCALL                                      0          
   26    37        INIT_METHOD_CALL                                         !1, 'saveXML'
         38        DO_FCALL                                      0  $26     
         39        ECHO                                                     $26
   29    40        INIT_METHOD_CALL                                         !3, 'insertBefore'
         41        INIT_METHOD_CALL                                         !1, 'createElement'
         42        SEND_VAL_EX                                              'li'
         43        DO_FCALL                                      0  $27     
         44        ASSIGN                                           ~28     !4, $27
         45        SEND_VAL_EX                                              ~28
         46        CHECK_FUNC_ARG                                           
         47        FETCH_OBJ_FUNC_ARG                               $29     !3, 'firstChild'
         48        SEND_FUNC_ARG                                            $29
         49        DO_FCALL                                      0          
   30    50        INIT_METHOD_CALL                                         !4, 'appendChild'
         51        INIT_METHOD_CALL                                         !1, 'createTextNode'
         52        SEND_VAL_EX                                              'test+i0'
         53        DO_FCALL                                      0  $31     
         54        SEND_VAR_NO_REF_EX                                       $31
         55        DO_FCALL                                      0          
   31    56        INIT_METHOD_CALL                                         !4, 'setAttribute'
         57        SEND_VAL_EX                                              'xml%3Aid'
         58        SEND_VAL_EX                                              'i0'
         59        DO_FCALL                                      0          
   34    60        INIT_METHOD_CALL                                         !1, 'saveXML'
         61        DO_FCALL                                      0  $34     
         62        ECHO                                                     $34
   37    63        INIT_METHOD_CALL                                         !2, 'evaluate'
         64        SEND_VAL_EX                                              '%2F%2Fol%2Fli%5Bnot%28%40xml%3Aid%29%5D'
         65        SEND_VAL_EX                                              null
         66        SEND_VAL_EX                                              <false>
         67        DO_FCALL                                      0  $35     
         68        ASSIGN                                                   !5, $35
   39    69        FETCH_OBJ_R                                      ~37     !5, 'length'
         70        SUB                                              ~38     ~37, 1
         71        ASSIGN                                                   !6, ~38
         72      > JMP                                                      ->84
   40    73    >   INIT_METHOD_CALL                                         !5, 'item'
         74        SEND_VAR_EX                                              !6
         75        DO_FCALL                                      0  $40     
         76        FETCH_OBJ_R                                      ~41     $40, 'parentNode'
         77        INIT_METHOD_CALL                                         ~41, 'removeChild'
         78        INIT_METHOD_CALL                                         !5, 'item'
         79        SEND_VAR_EX                                              !6
         80        DO_FCALL                                      0  $42     
         81        SEND_VAR_NO_REF_EX                                       $42
         82        DO_FCALL                                      0          
   39    83        PRE_DEC                                                  !6
         84    >   IS_SMALLER_OR_EQUAL                                      0, !6
         85      > JMPNZ                                                    ~45, ->73
   44    86    >   INIT_METHOD_CALL                                         !1, 'saveXML'
         87        DO_FCALL                                      0  $46     
         88        ECHO                                                     $46
   47    89        INIT_METHOD_CALL                                         !1, 'getElementById'
         90        SEND_VAL_EX                                              'i2'
         91        DO_FCALL                                      0  $47     
         92        ASSIGN                                                   !4, $47
   48    93        FETCH_OBJ_R                                      ~49     !4, 'nextSibling'
         94        ASSIGN                                                   !7, ~49
   49    95        FETCH_OBJ_R                                      ~51     !4, 'parentNode'
         96        ASSIGN                                                   !8, ~51
   50    97        INIT_METHOD_CALL                                         !3, 'removeChild'
         98        SEND_VAR_EX                                              !4
         99        DO_FCALL                                      0          
   51   100        INIT_METHOD_CALL                                         !3, 'insertBefore'
        101        INIT_METHOD_CALL                                         !1, 'createElement'
        102        SEND_VAL_EX                                              'li'
        103        DO_FCALL                                      0  $54     
        104        ASSIGN                                           ~55     !4, $54
        105        SEND_VAL_EX                                              ~55
        106        SEND_VAR_EX                                              !7
        107        DO_FCALL                                      0          
   52   108        INIT_METHOD_CALL                                         !4, 'appendChild'
        109        INIT_METHOD_CALL                                         !1, 'createTextNode'
        110        SEND_VAL_EX                                              'test+i2+replaced'
        111        DO_FCALL                                      0  $57     
        112        SEND_VAR_NO_REF_EX                                       $57
        113        DO_FCALL                                      0          
   53   114        INIT_METHOD_CALL                                         !4, 'setAttribute'
        115        SEND_VAL_EX                                              'xml%3Aid'
        116        SEND_VAL_EX                                              'i2'
        117        DO_FCALL                                      0          
   56   118        INIT_METHOD_CALL                                         !1, 'saveXML'
        119        DO_FCALL                                      0  $60     
        120        ECHO                                                     $60
   59   121        INIT_FCALL                                               'var_dump'
        122        INIT_METHOD_CALL                                         !1, 'getElementById'
        123        SEND_VAL_EX                                              'i2'
        124        DO_FCALL                                      0  $61     
        125        SEND_VAR                                                 $61
        126        DO_ICALL                                                 
   62   127        INIT_METHOD_CALL                                         !1, 'loadXML'
        128        INIT_METHOD_CALL                                         !1, 'saveXML'
        129        DO_FCALL                                      0  $63     
        130        SEND_VAR_NO_REF_EX                                       $63
        131        DO_FCALL                                      0          
   63   132        INIT_METHOD_CALL                                         !1, 'getElementById'
        133        SEND_VAL_EX                                              'i2'
        134        DO_FCALL                                      0  $65     
        135        FETCH_OBJ_R                                      ~66     $65, 'tagName'
        136        ECHO                                                     ~66
   66   137        INIT_FCALL                                               'var_dump'
        138        FETCH_OBJ_R                                      ~67     !2, 'document'
        139        IS_IDENTICAL                                     ~68     !1, ~67
        140        SEND_VAL                                                 ~68
        141        DO_ICALL                                                 
        142      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
157.65 ms | 1408 KiB | 15 Q