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/