Je souhaite pouvoir extraire tous les éléments "node" puis, pour chacun
d'eux, les sous-éléments "link". Alors pour les éléments nodes, c'est ok, je
fais
mais là, il m'extrait tous les éléments link du document XML (dans mon
exemple, trois) et non juste ceux qui sont rattachés au noeud. C'est comme
si la formule XPath était appliquée à la racine du document et non au noeud
lui-même. Quelqu'un a-t-il une idée ?
// reading the network attached infos
Node mainTopology = document.selectSingleNode("//main_topology");
AbstractGraph newGraph = new DefaultGraphImpl();
// reading the nodes attached infos
for (Node n : (List<Node>)(mainTopology.selectNodes("//node"))) {
Element el = (Element)n;
int id = Integer.parseInt(el.attribute("id").getValue());
newGraph.addNode(new DefaultNodeImpl(), id);
for (Node link : (List<Node>)(n.selectNodes("//link"))) {
Element linkEl = (Element)link;
int dest =
Integer.parseInt(linkEl.attribute("dest").getValue());
newGraph.addLink(new DefaultLinkImpl(), id, dest);
}
}
Je souhaite pouvoir extraire tous les éléments "node" puis, pour chacun d'eux, les sous-éléments "link". Alors pour les éléments nodes, c'est ok, je fais
mais là, il m'extrait tous les éléments link du document XML (dans mon exemple, trois) et non juste ceux qui sont rattachés au noeud. C'est comme si la formule XPath était appliquée à la racine du document et non au noeud lui-même. Quelqu'un a-t-il une idée ?
// reading the network attached infos Node mainTopology = document.selectSingleNode("//main_topology");
AbstractGraph newGraph = new DefaultGraphImpl();
// reading the nodes attached infos for (Node n : (List<Node>)(mainTopology.selectNodes("//node"))) { Element el = (Element)n; int id = Integer.parseInt(el.attribute("id").getValue()); newGraph.addNode(new DefaultNodeImpl(), id); for (Node link : (List<Node>)(n.selectNodes("//link"))) { Element linkEl = (Element)link; int dest = Integer.parseInt(linkEl.attribute("dest").getValue()); newGraph.addLink(new DefaultLinkImpl(), id, dest); } }
J'ai trouvé la répoonse tout seul... le "/" au début d'une expression XPath
signifie que l'on part à la racine du graphe... Donc tout va bien
"Wamli" <wamli@web.de> wrote in message news:43998d51$1@epflnews.epfl.ch...
Bonjour,
J'utilise dom4j pour circuler dans un arbre XML, mais j'ai un comportement
bizzarre. Voici un fichier XML type :
Je souhaite pouvoir extraire tous les éléments "node" puis, pour chacun
d'eux, les sous-éléments "link". Alors pour les éléments nodes, c'est ok,
je fais
mais là, il m'extrait tous les éléments link du document XML (dans mon
exemple, trois) et non juste ceux qui sont rattachés au noeud. C'est comme
si la formule XPath était appliquée à la racine du document et non au
noeud lui-même. Quelqu'un a-t-il une idée ?
// reading the network attached infos
Node mainTopology = document.selectSingleNode("//main_topology");
AbstractGraph newGraph = new DefaultGraphImpl();
// reading the nodes attached infos
for (Node n : (List<Node>)(mainTopology.selectNodes("//node"))) {
Element el = (Element)n;
int id = Integer.parseInt(el.attribute("id").getValue());
newGraph.addNode(new DefaultNodeImpl(), id);
for (Node link : (List<Node>)(n.selectNodes("//link"))) {
Element linkEl = (Element)link;
int dest =
Integer.parseInt(linkEl.attribute("dest").getValue());
newGraph.addLink(new DefaultLinkImpl(), id, dest);
}
}
Je souhaite pouvoir extraire tous les éléments "node" puis, pour chacun d'eux, les sous-éléments "link". Alors pour les éléments nodes, c'est ok, je fais
mais là, il m'extrait tous les éléments link du document XML (dans mon exemple, trois) et non juste ceux qui sont rattachés au noeud. C'est comme si la formule XPath était appliquée à la racine du document et non au noeud lui-même. Quelqu'un a-t-il une idée ?
// reading the network attached infos Node mainTopology = document.selectSingleNode("//main_topology");
AbstractGraph newGraph = new DefaultGraphImpl();
// reading the nodes attached infos for (Node n : (List<Node>)(mainTopology.selectNodes("//node"))) { Element el = (Element)n; int id = Integer.parseInt(el.attribute("id").getValue()); newGraph.addNode(new DefaultNodeImpl(), id); for (Node link : (List<Node>)(n.selectNodes("//link"))) { Element linkEl = (Element)link; int dest = Integer.parseInt(linkEl.attribute("dest").getValue()); newGraph.addLink(new DefaultLinkImpl(), id, dest); } }
Simon OUALID
Wamli wrote:
J'ai trouvé la répoonse tout seul... le "/" au début d'une expression XPath signifie que l'on part à la racine du graphe... Donc tout va bien
Oui, tu peux d'ailleurs directement utiliser //link qui te récupérera tous les tags link de ton arbre xml.
Wamli wrote:
J'ai trouvé la répoonse tout seul... le "/" au début d'une expression XPath
signifie que l'on part à la racine du graphe... Donc tout va bien
Oui, tu peux d'ailleurs directement utiliser //link qui te récupérera
tous les tags link de ton arbre xml.