Bonjour,

Merci Gael et Philippe de votre aide!
Je peux maintenant parser comme je veux mon fichier XML.
Par contre, j'ai voulu tester les deux solutions, et je n'ai réussi à mettre en 
oeuvre que la solution proposée par Gael.
En effet, en utilisant celle de Philippe, j'ai l'erreur suivante:

org.apache.commons.jxpath.JXPathException: No value for xpath: 
/PubmedArticleSet/PubmedArticle/MedlineCitation/PMID

Pourtant j'ai pris exactement le même xpath...
Avez-vous une idée de l'erreur que je peux faire?

solution OK (selon Gael):

        var processor = 
cocoon.getComponent(Packages.org.apache.excalibur.xml.xpath.XPathProcessor.ROLE 
);
        var myData = Packages.org.apache.cocoon.xml.dom.DOMUtil.getValueOf(     
                docXML,"/PubmedArticleSet/PubmedArticle/MedlineCitation/PMID", 
"DefaultValue",processor);

solution selon Philippe :

    var xpathContext = 
Packages.org.apache.commons.jxpath.JXPathContext.newContext(docXML.getDocumentElement());
    var myData = 
xpathContext.getValue("/PubmedArticleSet/PubmedArticle/MedlineCitation/PMID");

Merci!

Bérengère
-----Message d'origine-----
De : Philippe Gassmann [mailto:[EMAIL PROTECTED]
Envoyé : Tuesday, January 10, 2006 09:34
À : [email protected]
Objet : Re: parsing XML dans flowscript


Bonjour à tous,

[EMAIL PROTECTED] a écrit :

>Selon [EMAIL PROTECTED]:
>
>  
>
>>Bonjour,
>>
>>Je cherche à récupérer la valeur d'un noeud d'un fichier XML, à partir de mon
>>flowscript.
>>Que me conseillez-vous?
>>Merci pour vos bonnes idées.
>>Bérengère
>>
>>
>>
>>    
>>
>
>
>Une solution peut-être la suivante :
>
>1) récupérer le XML du document comme suit :
>
>var docXML = loadDocument( "cocoon://pipeline/access/to/your/xml/document");
>
>  
>
l'uri du document n'est pas forcément cocoon://, si ton fichier est un 
fichier statique disponible dans le contexte de l'appli alors tu peux 
utiliser context:// si il est ailleurs sur le disque dur file://. Passer 
par un pipeline n'est absolument pas nécéssaire.

>2) récupérer le noeud recherché
>
>processor = cocoon.getComponent(
>Packages.org.apache.excalibur.xml.xpath.XPathProcessor.ROLE );
>
>var myData = Packages.org.apache.cocoon.xml.dom.DOMUtil.getValueOf( docXML,
>"/your/xpath/condition[ position() != 2 ]/@attribute", "DefaultValue",
>processor);
>
>  
>
Pour récupérer un noeud, il y a aussi l'API JXPathContext qui s'avère 
très pratique à utiliser:
var xpathContext = 
Packages.org.apache.commons.jxpath.JXPathContext.newContext(document.getDocumentElement());

var myData xpathContext.getValue("/your/xpath/condition[ position() != 2 
]/@attribute");

De plus il est possible d'utiliser facilement cette api pour modifier 
ton DOM...

>3) fonction loadDocument
>
>function loadDocument(uri)
>{
>var source = null;
>var resolver = null;
>var parser = null;
>
>try
>{
>parser =
>cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
>resolver =
>cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
>source = resolver.resolveURI(uri);
>
>var input = source.getInputStream()
>
>var is = new Packages.org.xml.sax.InputSource(input);
>is.setSystemId(source.getURI());
>
>return parser.parseDocument(is);
>}
>finally
>{
> if (source != null) resolver.release(source);
> cocoon.releaseComponent(parser);
> cocoon.releaseComponent(resolver);
>}
>}
>
>  
>

-- 
Philippe GASSMANN
Systèmes d'Information
ANYWARE TECHNOLOGIES
Tel : +33 (0)5 61 00 52 90
Fax : +33 (0)5 61 00 51 46
http://www.anyware-tech.com/


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:[EMAIL PROTECTED]
Autres commandes : mailto:[EMAIL PROTECTED]

Répondre à