Bonsoir
Je cherche à réaliser une requête XPath qui renvoie
"hdparm
fpack2"
à partir du texte "fnux-base" (et "fpack2" à partir de "libxml2") et du fichier xml suivant :
<root>
<package name="hdparm">
<depends>fnux-base
fnux-base
</depends>
</package>
<package name="fpack2">
<depends>fnux-base
fnux-base
fnux-base
fnux-base
libxml2
fnux-base
</depends>
</package>
</root>
Or je n'y arrive pas :
/root[contains(./package/depends/text(),"fnux-base")]
Ceci renvoie tous les noeuds, mais si on met libxml2, ne renvoie plus rien !
Merci d'avance !
# Non testé mais
Posté par _alex . Évalué à 3.
//package[contains(./depends/text(), 'aPackageName')]/@name
Cette requête renvoit un NodeSet, donc après il faut concaténer chaque Node du NodeSet pour avoir une seule chaîne de caractères. Cela doit être possible directement avec string :
string(//package[contains(./depends/text(), 'aPackageName')]/@name)
cf http://www.w3.org/TR/xpath(...) (à la fin pour toute les fonctions)
[^] # Re: Non testé mais
Posté par Pinaraf . Évalué à 1.
Ça me renvoie uniquement hdparm (dans le cas de fnux-base) et fpack2 (pour libxml2)
[^] # testé et
Posté par _alex . Évalué à 2.
J'ai pris cet exemple de la doc : http://www.xmlsoft.org/examples/index.html#xpath1.c(...)
Modifier un peu le code de print_xpath_nodes(xmlNodeSetPtr nodes, FILE* output) pour afficher le contenu des attributs.
Et avec ton fichier :
[alex@zzz ~/xpath]$ ./xpath1 test.xml "//package[contains(./depends/text(),'libxml2')]/@name"
Result (2 nodes):
= attribute "name"
value="fpack2"
[alex@zzz ~/xpath]$ ./xpath1 test.xml "//package[contains(./depends/text(),'base')]/@name"
Result (3 nodes):
= attribute "name"
value="hdparm"
= attribute "name"
value="fpack2"
D'ailleurs attention aux effet parasite : si tu cherche le package "base" alors qu'un package s'appelle "xmlbase" -> tu match alors que tu ne devrais pas.
Code en peluche :
[^] # Re: testé et
Posté par fabrizio duhem (site web personnel) . Évalué à 1.
Memory leak
the attribute value or NULL if not found. It's up to the caller to free the memory with xmlFree().
http://xmlsoft.org/html/libxml-tree.html#xmlGetProp(...)
[^] # Re: testé et
Posté par Pinaraf . Évalué à 1.
Zut chez moi le même genre de code ne marche pas !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.