Ben voor een project wat met SimpleXML aan het stoeien en ik heb nu iets ontdekt dat ik erg vreemd vind.
Wanneer je op een SimpleXMLElement de xpath methode gebruikt, lijkt het wel alsof het geretourneerde Array niet echt de resultaten van die xpath expressie bevatten. Laat me dat uitleggen met een voorbeeld:
De 2 pogingen hierboven zouden naar mijn idee hetzelfde resultaat moeten opleveren. De expressie //item zou alleen naar items binnen record mogen kijken, want dat is het xml object waar ik de expressie op los laat. Maar het lijkt wel of hij vergeet dat ik een selectie uit het document heb gebruikt, kijk maar:
Bij de xpath methode lijkt het geretourneerde object dus niet zijn eigen context te kennen. Iemand een verklaring voor dit gedrag?
Wanneer je op een SimpleXMLElement de xpath methode gebruikt, lijkt het wel alsof het geretourneerde Array niet echt de resultaten van die xpath expressie bevatten. Laat me dat uitleggen met een voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| $xml_data='<test> <record id="1"> <item>item1</item> <item>item2</item> </record> <record id="2"> <item>item3</item> <item>item4</item> </record> </test>'; $xml = new SimpleXMLElement($xml_data); $records_xml=$xml->xpath('//test/record'); foreach ($records_xml as $record_xml){ $id=(string)$record_xml[0]['id']; $items_xml=$record_xml->xpath('//item'); foreach ($items_xml as $item_xml){ $item=(string)$item_xml[0]; print 'ID:'.$id."\t".$item."\n"; } } print "\nPoging 2:\n"; foreach($xml->record as $record) { $id=(string)$record[id]; foreach($record->item as $item) { print 'ID:'.$id."\t".(string)$item."\n"; } } |
De 2 pogingen hierboven zouden naar mijn idee hetzelfde resultaat moeten opleveren. De expressie //item zou alleen naar items binnen record mogen kijken, want dat is het xml object waar ik de expressie op los laat. Maar het lijkt wel of hij vergeet dat ik een selectie uit het document heb gebruikt, kijk maar:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| ID:1 item1 ID:1 item2 ID:1 item3 ID:1 item4 ID:2 item1 ID:2 item2 ID:2 item3 ID:2 item4 Poging 2: ID:1 item1 ID:1 item2 ID:2 item3 ID:2 item4 |
Bij de xpath methode lijkt het geretourneerde object dus niet zijn eigen context te kennen. Iemand een verklaring voor dit gedrag?