Bonjour,
Je souhaiterais récupérer la liste de toutes les valeurs que prends un attribut dans une liste d'éléments considérés. Je n'y arrive pas... à part en comparant (pour chaque élément) la valeur de l'attribut avec le contenu complet d'une liste d'attribut. Si elle est pas encore dans la liste je la rajoute.
Cependant, ma liste peut atteindre près de 10000 valeurs différentes, et je pense que ma méthode (bourrine) est très lentes :'(
Merci d'avance et n'hésitez pas si vous voulez plus de précisions
Edit :
Voilà le XML que j'ai en entrée :
Et en sortie je souhaiterais avoir une liste contenant les valeurs :
rondelle_ft.prt
sw3dps-md52c150dn100-1278741887.prt
sw3dps-md52c150dn100-1_dn80_100.prt
sw3dps-md52c150dn100-1_dn100_se.prt
sw3dps-md52c150dn100-1_md52c150.prt
sw3dps-md52c150dn100-1_md52dn80.prt
etc.
En fait je veux récupérer le nom de mes pièces en doublon.
Pour le moment, je fait ça :
Mais ça ne marche pas :/ et c'est trop lent si j'ai beaucoup d'entrées :'(
Code : 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 public void testDoubloons() throws JDOMException{ XMLDocument xmlDoc = new XMLDocument(mainFrame.conf.listXMLFilePath); XMLDocument output = new XMLDocument(XMLAttributes.DOUBLOONS,true); output.SaveXML(mainFrame.conf.tempDoubleXmlPath); String xPath = "descendant::"+ XMLAttributes.FILE_ELEMENT; General.printMsg(xPath, General.DEBUG_MESSAGE); XPath test = XPath.newInstance(xPath.toString()); List <?> liste = test.selectNodes(xmlDoc.getRacine()); for (int j=0;j<liste.size();j++){ Element el = (Element) liste.get(j); String nameToTest = el.getAttributeValue(XMLAttributes.NAME); String tempXPath = "descendant::"+ XMLAttributes.FILE_ELEMENT +"[attribute::"+XMLAttributes.NAME+"=\""+ nameToTest +"\"]"; XPath testLocal = XPath.newInstance(tempXPath.toString()); List <?> resultat = testLocal.selectNodes(xmlDoc.getRacine()); if(resultat.size()>1){ for(int i=0;i<resultat.size();i++){ Element el1 = (Element) resultat.get(i); el1.detach(); output.getRacine().addContent(el1); } } output.SaveXML(mainFrame.conf.tempDoubleXmlPath); } XMLDocument.exportDoubloonsXmlToXsl(output,mainFrame.conf.doubloonsFilePath); }
edit : code modifié et fonctionnel, mais les temps de traitement sont trop longs (de l'ordre de la demi journée pour ma base de test "minimaliste" de 60000 fichiers).
Partager