2012-07-12 4 views
1

J'ai le code folowing:requête XPath contient

$xml = simplexml_load_file($url); 

$query = '/root/parent[Model="Corolla"]'; 

//RUN QUERY ON XML 
$xQuery = $xml->xpath($query); 

Et voici le fichier XML:

<root> 
    <parent> 
    <Model>Corolla A/C</Model> 
    </parent> 
</root> 

Ce code fonctionne bien si je recherche la chaîne exacte "Corolla". Le problème que j'ai est que certaines des valeurs sont similaires à "Corolla A/C bon état"

Y at-il un moyen que je peux interroger le fichier XML pour tout élément du modèle qui contient le mot Corolla plutôt que l'exact chaîne Corolla?

EDIT: J'ai ajouté un exemple de mon aide XML clarifier.

Répondre

3

Dans ce cas particulier je suggère la fonction starts-with plutôt que contains (compte tenu de la prise en charge tous vos modèles commencent par le mot « Corolla »):

EDIT

En fonction de votre édition, vous ce qui devrait changer la requête:

/root/parent/Model[starts-with(., 'Corolla')] 

Vous pouvez également jeter un oeil à la Zvon XSLT Tutorial. C'est une très bonne lecture.

+0

Je viens d'éditer le post original pour montrer un exemple de ce à quoi mon fichier XML pourrait ressembler. Lorsque vous utilisez le @Model, cela fonctionnera-t-il avec l'exemple que j'ai montré? Parce que la corolle est entrée en tant que valeur et non en tant qu'attribut si je ne me trompe pas. Merci pour l'aide que je vais mettre en signet ce tutoriel. – Marc

1
/root/parent[contains(@Model, 'Corolla')] 

Notez le @ sur le modèle ... qui est nécessaire pour indiquer que vous travaillez avec un attribut de la balise parent, et non une étiquette AUTRES dont le nom se trouve être Model.