cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <Berengere.Ge...@sanofi-aventis.com>
Subject RE: parsing XML dans flowscript
Date Tue, 10 Jan 2006 09:36:55 GMT
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:philippe.gassmann@anyware-tech.com]
Envoyé : Tuesday, January 10, 2006 09:34
À : users-fr@cocoon.apache.org
Objet : Re: parsing XML dans flowscript


Bonjour à tous,

gael@pegliasco.com a écrit :

>Selon Berengere.Genin@sanofi-aventis.com:
>
>  
>
>>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:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Mime
View raw message