Salut,

Un flux représente un annuaire téléphonique. Les contacts sont répartis dans des services, eux-même répartis dans des sociétés.

Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<annuaire xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="personne.xsd">
	<societe nom="soc_a">
		<service nom="serv_a">
			<contact>
				<nom>nomPers_a</nom>
				<prenom>prenomPers_a</prenom>
				<num_tel>123456</num_tel>
			</contact>
			<contact>
				<nom>nomPers_b</nom>
				<prenom>prenomPers_b</prenom>
				<num_tel>321654</num_tel>
			</contact>
		</service>
 
		<service nom="serv_b">
			<contact>
				<nom>nomPers_c</nom>
				<prenom>prenomPers_c</prenom>
				<num_tel>123456</num_tel>
			</contact>
			<contact>
				<nom>nomPers_d</nom>
				<prenom>prenomPers_d</prenom>
				<num_tel>321654</num_tel>
			</contact>
		</service>
	</societe>
</annuaire>

Je dois intégrer ces données dans une base. Je dois récupérer les contacts (nom, prénom, num_tel), mais aussi le service et la société d'appartenance.

Par exemple, je dois récupérer toutes les contacts de la société A. Pour cela, j'utilise XPath :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
XPathFactory xPathFact = XPathFactory.newInstance();
XPath xpath = xPathFact.newXPath();
 
XPathExpression exp = xpath.compile("//annuaire/societe[@nom='soc_a']/service/contact");
NodeList liste = (NodeList) exp.evaluate(documentXml, XPathConstants.NODESET);

J'ai donc une liste de Node. Ma question est : Comment récupérer les informations des nœuds parents (en particulier les attributs comme "serv_a", "soc_a") ?

En réalité, mon document XML contient beaucoup plus de niveaux (région mondiale, niveau hiérarchique, etc.) Par conséquent, j'aimerais éviter l'utilisation de getParentNode(), surtout si le schéma XML est amené à évoluer...

N'y-a-t-il pas moyen d'utiliser XPath sur un Node ?