cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Wallez <sylv...@apache.org>
Subject Re: parsing XML dans flowscript
Date Tue, 10 Jan 2006 10:08:10 GMT
Berengere.Genin@sanofi-aventis.com wrote:
> 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
>   

<snip/>

> 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");
>   

C'est probablement parce que je contexte est initialisé sur l'élément 
racine (getDocumentElement) et donc l'expression ne doit pas comporter 
le nom de cet élément.

On peut aussi créer le contexte sur le document lui-même.


>> 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);
>> }
>> }
>>     

Une version plus simple, et qui évite d'utiliser un parser quand on 
utilise une source nativement XML (comme un "cocoon:" ou "xmldb:") :

function loadDocument(uri) {
    var resolver = 
cocoon.getComponent("org.apache.excalibur.source.SourceResolver");
    var source = null;
    var document;
    try {
        source = resolver.resolveURI(uri);
        document = 
Packages.org.apache.cocoon.components.source.SourceUtil.toDOM(source);
    } finally {
        resolver.release(source);
        cocoon.releaseComponent(resolver);
    }
    return document;
}

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://bluxte.net                     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
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