cerhu > comp.lang.* > comp.lang.java

y.a.n (10/09/2003, 11h55)
Bonjour
est il possible d effectuer dans dom des selection de Node avec des
expression xpath
comme avec xsl
ex :
match="//mon_noeud[@id='12']"
y aurait it un truc genre
Element e = document.getElement("//mon_noeud[@id='12']");

merci.
seb (11/09/2003, 21h13)
"y.a.n" <y.a.n> wrote in message news:54ce
> Bonjour
> est il possible d effectuer dans dom des selection de Node avec des
> expression xpath
> comme avec xsl
> ex :
> match="//mon_noeud[@id='12']"
> y aurait it un truc genre
> Element e = document.getElement("//mon_noeud[@id='12']");
> merci.


A ma conanissance, ce n'est pas possible, pour la bonnne et simple
raison qu'XPath ne fait pas partie de la norme DOM.
Par contre, des API l'implémente, comme Xalan (puisqu'XPath est
utilisé dans XSL). regarde un peu chez Apache. C'est peut-être pas
aussi simple que tu l'espères, mais j'ai déjà utilisé la classe XPath.
LOSINGER Olivier (12/09/2003, 03h17)
En utilisant XPathAPI.selectNodeIterator(document, xPath); et en parcourant
le NodeIterator, tu dois pouvoir faire cela .

Ci joint une copie de code implementant cette fonction:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.*;
import org.w3c.dom.Node;
import java.io.FileOutputStream;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xml.serialize.OutputFormat;

/** util pour xpath **/
import org.w3c.dom.traversal.NodeIterator;
import org.apache.xpath.XPathAPI;
/** E/S */
import java.io.*;

import java.util.Hashtable;
import java.util.Enumeration ;
import java.util.Vector ;

public class Base {

private String requete;
private Hashtable table=new Hashtable();
private Document document;
private Element root;
private NodeIterator nl;

/**
*Constructeur
**/
public Base() {

DocumentBuilderFactory fabrique = null;

try {
fabrique = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fabrique.newDocumentBuilder
();
document = builder.newDocument();
Element root = (Element) document.createElement
("BASE");
document.appendChild(root);
}

catch (Exception e)
{
e.printStackTrace();
}

}
/**
*Methode read:Lecture de la base
*@param file Fichier à lire
**/
public void read(String file)
{
try
{
//creation du factory
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
//creation du builder */
DocumentBuilder builder = factory.newDocumentBuilder();
//on parse le fichier
document = builder.parse( new File(file) );
//on obtient la liste des noeuds
NodeList listdoc=document.getChildNodes();
//on recupere le fils cad le root
//root=(Element)listdoc.item(0);
}
catch (Exception e)
{
e.printStackTrace();
}

}

/**
*Ecriture dans le fichier
*@param file nom du fichier
*@return aucun
**/
public void write(String file)
{

OutputFormat outf = new OutputFormat();
outf.setIndent(0);
outf.setIndenting(true);
outf.setEncoding("ISO-8859-1");

try
{
XMLSerializer xmls = new XMLSerializer(new
FileOutputStream(file),outf);
xmls.serialize(document);
}
catch ( Exception e )
{
System.out.println("XMLGenerator : error "+e);
}
}

public void query(String xPath)throws Exception
{
nl = XPathAPI.selectNodeIterator(document, xPath);
}

public Vector getResult()
{
Vector result=new Vector();
Node n=null;
while((n= nl.nextNode())!=null)
{
result.addElement(n);
}
// System.out.println(result.size());
return result;
}

}

news:bf89c7db.0309111113.162332a7:
[..]
Discussions similaires
compter avec une requête Xpath

Comment calculer ceci avec xsl/xpath

requête xpath

[LIBXML2][LONG] requete XPATH ne retourne pas le bon nombre de resultats


Fuseau horaire GMT +2. Il est actuellement 00h09. | Privacy Policy