Un problème de XPath
Chacha
Membre
Salut,
J'ai un document XML que voici (c'est du SVG).
J'aimerais récupérer la chaà®ne de caractères de l'attribut "dc:description" (ici je veux donc récupérer toto).
Pour ça, j'utilise un XMLDocument et un "nodesWithXPath:", mais je n'arrive pas à construire un XPath qui me renvoie mon résultat. Quelqu'un aurait la formule magique ?
+
Chacha
J'ai un document XML que voici (c'est du SVG).
J'aimerais récupérer la chaà®ne de caractères de l'attribut "dc:description" (ici je veux donc récupérer toto).
Pour ça, j'utilise un XMLDocument et un "nodesWithXPath:", mais je n'arrive pas à construire un XPath qui me renvoie mon résultat. Quelqu'un aurait la formule magique ?
+
Chacha
<br /><?xml version="1.0" encoding="utf-8"?><br /><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><br /><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 300 300"><br /><metadata><br /> <rdf:RDF<br /> xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"<br /> xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#"<br /> xmlns:dc = "http://purl.org/dc/elements/1.1/" ><br /> <rdf:Description about="description" dc:description="toto" dc:format="image/svg+xml"><br /> </rdf:Description><br /> </rdf:RDF><br /></metadata><br /></svg><br />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'y arrive pas quand même. Je n'arrive pas à récupérer les attributs !
+
Chacha
Mais je n'arrive pas à faire plus simple. Ce que j'avais essayé au début échoue lamentablement :
+
Chacha
Si ça ne doit pas fonctionner avec ce que tu as fait au début, c'est parce que c'est tout simplement pas la bonne manière je pense, mais bon je ne suis pas catégorique là -dessus car je n'ai jamais pratiqué avec les classes NSXML.
Oh, mais je n'en doute pas (copain!)
C'est juste un problème de XML, je pense... Il se trouve qu'avec NSXMLmachin, je n'arrive pas facilement à extraire l'attribut de mon choix. Comme je ne pense pas que NSXMLmachin soit pourri, je suppose que c'est moi qui me trompe en construisant ma requête XPath. Et il est possible que je me trompe parce que j'ai mal interprété l'arbre XML du svg.
Pour moi, "dc:description" est un attribut de "rdf:Description" qiu est un élément de "rdf:RDF" qui est un élément de "metadata" qui est élément de "svg". Si c'était le cas, alors ma requête @".//svg/metadata/rdf:RDF/rdf:Description/@dc:description" marcherait.
Or, elle ne marche pas.
Donc je me suis trompé quelque part. Ce qui me trouble, ce sont ces "rdf:" et "dc:", je n'ai jamais vu ça, je me demande si ça fait partie du nom ou pas...
+
Chacha
En fait en explorant la doc, j'ai vu que rdf: correspond à un namespace (la vache, j'y connais rien aux namespace en XML).
Le problème devient donc :
Comment je construit ma requête pour gérer les namespace ?
Bon, je cherche
+
Chacha
J'ai exactement le même problème.
Ainsi si tu prends un XML du genre et un du genre : seront strictement équivalents ! "paf" ou "ns1" ne sont que des noms locaux pour avoir une écriture plus courte des tags XML utilisant ce namespace, mais c'est l'URL "http://plouf.org" qui les qualifie. On pourrait même écrire ce même XML : il aurait la même signification aussi.
Il faut donc trouver un moyen de déclarer ton namespace avant de l'utiliser. Dans une feuille XSLT ça se fait dans l'arbre XML du XSLT, dans les XPath de Cocoa j'imagine qu'il faut vérifier où on peut les déclarer, sans doute vérifier dans le xmlDocument, un truc comme ça ?
le problème c'est justement comment déclarer ces namespaces avec NSXMLDocument.