On me donne du XML dans le format suivant, et je l'analyse avec SimpleXML de PHP.PHP SimpleXML XPath contient() pour trouver d'autres éléments référencés par cet élément
<?xml version="1.0" encoding="UTF-8"?>
<ManageMyBooking>
<BookingInfo>
<PartyDetails>
<Passenger>
<PaxNo>1</PaxNo>
<Title>Mrs</Title>
<Surname>Murphy</Surname>
</Passenger>
<Passenger>
<PaxNo>2</PaxNo>
<Title>Mr</Title>
<Surname>Murphy</Surname>
</Passenger>
<Passenger>
<PaxNo>3</PaxNo>
<Title>Miss</Title>
<Surname>Murphy</Surname>
</Passenger>
</PartyDetails>
<Accommodation>
<Units>
<Unit>
<UnitNo>1</UnitNo>
<UnitDesc>...</UnitDesc>
<PaxAssociated>1|2</PaxAssociated>
</Unit>
<Unit>
<UnitNo>2</UnitNo>
<UnitDesc>...</UnitDesc>
<PaxAssociated>3</PaxAssociated>
</Unit>
</Units>
</Accommodation>
</BookingInfo>
</ManageMyBooking>
Je boucle à travers les unités (chambres) ainsi:
// $Accommodation is a SimpleXML Object defined earlier, and able to provide relevant info
<? foreach ($Accommodation->Units as $Units) {
foreach ($Units->Unit as $Unit) {
// (room/unit details echoed out here)
foreach ($Unit->xpath('//Passenger[contains(PaxAssociated,./PaxNo)]') as $RoomPax) { ?>
<?= $RoomPax->Title $RoomPax->Surname" ?><br />
<?= "$RoomPax->Title $RoomPax->Surname" ?><br />
<? }
}
} ?>
pour tenter de montrer les noms des passagers (hors Pax) dans chaque chambre.
Mais ce xpath ne trouve personne, et ce qui suit obtient tout le monde.
//Passenger[contains(PaxNo,./PaxAssociated)]
Ce qui est particulièrement frustrant est que je l'ai utilisé avec succès XPath ailleurs dans le même PHP dans un but similaire, sans problème.
Toute aide, tout conseil ou suggestion sera grandement apprécié.
Edit: pour être complet, et de répondre à une question de plusieurs personnes: Les œuvres suivantes ailleurs dans le code, (bien que pas correctement 100% compte tenu de la mise en correspondance possible sur '22' vs '2'.
//Flight[contains(PaxAssociated,./PaxNo)]
Je ne comprends pas comment un élément xpath sur un élément peut renvoyer un résultat quelconque pour '// passenger', étant donné que dans votre exemple de structure xml, les unités ne contiennent pas de passagers. Pourriez-vous poster comment l'objet $ accomodation est défini? –
Il semble être une fonctionnalité intégrée aux objets SimpleXML, l'élément Unit est directement créé un objet SimpleXML qui contient l'arbre entier. – jezmck
Caractéristique intéressante - bon à savoir à ce sujet, merci! –