Bonjour,

j'ai grâce à votre aide pu avancer dans un projet. celui-ci me permet de récupérer le texte entre des balises.
Afin de faire évoluer ce code, je désire maintenant appliquer un filtre à celui-ci comme suit:

voici l'exemple de xml

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
28
29
30
31
32
33
 
<PRE>
P0695/20 NOTAMN
Q) LFFF/QOBAW/IV/M  /E /000/006/4940N00327E001
A) LFFF B) 2002260844 C) PERM
E) MEASURE MAST NR02087 AT VERSIGNY AISNE WITHDRAWN 
PSN : 494007N 0032706E
CREATED: 26 Feb 2020 08:45:00 
SOURCE: EUECYIYN
</PRE>
<PRE>
P0676/20 NOTAMN
Q) LFFF/QOBCE/IV/M  /E /000/013/4634N00259E001
A) LFFF B) 2002241539 C) PERM
E) MEASURE MAST RDL169/8.5NM LFJU AD : 
PSN : 463423N 0025857E 
HEIGHT : 334FT 
ELEV : 1213FT 
LIGHTING : DAY AND NIGHT
CREATED: 24 Feb 2020 15:39:00 
SOURCE: EUECYIYN
</PRE>
<PRE>
P0662/20 NOTAMN
Q) LFFF/QOLAS/IV/M  /E /000/010/4909N00315E001
A) LFFF B) 2002211649 C) 2003210800
E) OBST NR E0229 LIGHTS OUT OF SERVICE (2 OUT OF 8 WIND TURBINES)
PSN : 490903N 0031449E
HEIGHT : 427FT
ELEV: 984FT
CREATED: 21 Feb 2020 16:51:00 
SOURCE: EUECYIYN
</PRE>
le code Java ci-dessous me permet de récupérer toute les valeurs entre les balises (et d'une certaine manière me convient très bien). Sauf que dans mon évolution, j'ai vu qu'à l'aide de regex je peux appliquer un filtre (j'ai pu lire ça dans un tuto).
Par conséquent je souhaiterais savoir à quel moment je dois appliquer ce filtre.
voici ci-dessous mon code Java :

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
package extraction_xml;
 
import java.io.*;
import javax.xml.xpath.*;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.namespace.*; 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
 
public class Extraction_avec_filtre {
 
	static File fichier;
 
	// Constructeur 
	public Extraction_avec_filtre (String url){
		fichier = new File(url);
	}
 
	// Méthodes 
	/**
         * créer une instance de XPath et lui faire évaluer une XPathExpression
     * @param file
     * @param expression
     * @param retour
     * @return 
         */
	public String evaluerDOM(File file, String expression, QName retour){
		String texteCopie=null;
 
		try{
			DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder constructeur = docBuilderFactory.newDocumentBuilder();
			Document document = constructeur.parse(file);
 
			//création du XPath 
			XPathFactory fabrique = XPathFactory.newInstance();
			XPath xpath = fabrique.newXPath();
 
			//évaluation de l'expression XPath
			XPathExpression exp = xpath.compile(expression);
			NodeList resultat = (NodeList) exp.evaluate(document,XPathConstants.NODESET); // récupère la liste de Node correspondant au xpath (donc des pre)
 
			StringBuilder sb=new StringBuilder(); // pour faire la concaténation
			for(int i=0; i<resultat.getLength(); i++) { // parcours
				if ( i!=0 ) { // pour avoir des séparations entre chaque node, sauf pour le premier
                                    sb.append("\n--------------------------\n");//ajout d'une ligne de séparation par exemple
                                    //sb.append("\n"); // ajoute une ligne vide 
				}
 
                                //sb.append("Ligne ").append(i+1).append("\n");//ajout d'un titre par exemple
                                sb.append("\n");//ajout d'une ligne de séparation par exemple
				Node pre = resultat.item(i); // on récupère le node d'index i 
				sb.append(pre.getTextContent()); // concaténation du texte du node
			}
 
			texteCopie=sb.toString(); // 
		}catch(XPathExpressionException xpee){
			xpee.printStackTrace();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return texteCopie;
	}
 
	/**
         * @param args
         */
	public static void main(String[] args) throws IOException {
		Extraction test = new Extraction("/Users/moi/Desktop/testNOTAM/MonFichier.xml");
		String resultat = test.evaluerDOM(fichier, "//PRE", XPathConstants.STRING);
 
               /* File Notams = new File("/Users/moi/Desktop/notams_test.txt") ;
            try (PrintWriter out = new PrintWriter(new FileWriter(Notams))) {
                out.write(resultat) ; //écris bonjour dans le fichier
                out.println(); //fais un retour à la ligne dans le fichier
                out.close() ; //Ferme le flux du fichier, sauvegardant ainsi les données.*/
                System.out.println(resultat);
            } 
	}
 
/*}*/
Je souhaite récupérer juste l'ensemble du texte entre balise <PRE> si celle-ci contient le mot "QOBCE" dans sa 2eme ligne comment pourrais-je faire s'il vous plait ?
Dois-je utiliser dans le string builder mon filtre??? Je vous avoue avoir de grosses difficultés...
Par avance merci pour votre aide