2010-11-19 7 views
1

Comment puis-je atteindre cet objectif:php XPath sur XML

<root> 
<gallery name="First"> 
<picture active="1" detail="not shown"/> 
<picture active="1" detail="not shown"/> 
<picture active="0" detail="not shown"/> 
</gallery> 
<gallery name="Second"> 
<picture active="0" detail="not shown"/> 
<picture active="1" detail="SHOW THIS ONE"/> 
<picture active="1" detail="AND SHOW THIS ONE" /> 
</gallery> 
</root> 

Je suis en train:

$myArray = $objXML->xpath('gallery[@name="Second"]/picture[@active=1]'); 

Comment puis-je changer pour obtenir la sortie désirée? Merci, Andy

+0

pourquoi avez-vous changé de DOM dans votre dernière question SimpleXML maintenant? – Gordon

+0

J'utilisais DOM pour ajouter et supprimer des nœuds parce que j'avais lu que c'était beaucoup plus simple qu'avec SimpleXML, j'utilise SimpleXML pour afficher et éditer le XML. – Andy

Répondre

4

Votre XPath est faux. Soit utiliser

/root/gallery[@name="Second"]/picture[@active=1] 

pour correspondre à cette constellation de nœud à partir du nœud racine uniquement ou

//gallery[@name="Second"]/picture[@active=1] 

pour correspondre à cette constellation de noeuds partout dans le document (plus lent)

exemples complets:

$dom = new DOMDocument; 
$dom->load('NewFile.xml'); // containing your XML 
$xp = new DOMXPath($dom); 
$pictures = $xp->query('/root/gallery[@name="Second"]/picture[@active=1]'); 
foreach ($pictures as $picture) { 
    echo $dom->saveXml($picture), PHP_EOL; 
} 

donne

<picture active="1" detail="SHOW THIS ONE"/> 
<picture active="1" detail="AND SHOW THIS ONE"/> 

et

$sxe = new SimpleXMLElement('NewFile.xml', NULL, TRUE); 
$pictures = $sxe->xpath('/root/gallery[@name="Second"]/picture[@active=1]'); 
foreach ($pictures as $picture) { 
    echo $picture['detail'], PHP_EOL; 
} 

donne

SHOW THIS ONE 
AND SHOW THIS ONE 
+0

ils ne fonctionnent pas pour moi, êtes-vous autorisé à interroger pour plus d'une chose dans xpath? – Andy

+1

@andy voir la mise à jour. "Ne travaille pas pour moi" n'est pas une description correcte de l'erreur. veuillez clarifier vos problèmes avec cela. – Gordon

+0

J'ai testé @ xpath Gordon et cela fonctionne pour moi aussi ... – pleasedontbelong