Bonjour pour tous,
Mon but est de créer un code Java qui permet de changer les valeurs des attributs d’un fichier XML.
Au debut mon fichier XML est le suivant :
Pour changer les valeurs des attributs longueur , largeur , abscisse , ordonnée , j’ai utilisé cette fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?xml version="1.0" encoding="UTF-8" ?> < application > <interface nom="magic" abscisse="10" ordonnee="20"largeur="700" longueur="600" > <barre nom="jtoolbar1" abscisse="20" ordonnee="0" date="0" exit="0" graver="1" help="0" memory="1" open_bd="1" open_cd="1" open_file="1" open_image="1" oriontation="0" server="0" /> </interface> </ application >
Alors maintenant mon fichier XML est le suivant :
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 public static void xmlOutputWrite(String cdeName)throws Exception { try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //Récupère une instanxce de la classe DocumentBuilder DocumentBuilder parser = factory.newDocumentBuilder(); //Effectue le parsing avec récupération du noeud DOM Document Document document = parser.parse(cdeName); StreamResult result1=new StreamResult(cdeName ); DOMSource source =new DOMSource(document); //Element utilisateur = document.getDocumentElement(); String xpath = "/application/interface"; Element utilisateur = document.getElementById(xpath); Node result = XPathAPI.selectSingleNode(document, xpath); utilisateur = (Element)result; utilisateur.setAttribute("abcisse", "50" )); utilisateur.setAttribute("ordonne","30")); utilisateur.setAttribute("longueur","900", )); utilisateur.setAttribute("largeur","800",)); try { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); transformer.transform(source,result1); } catch (TransformerConfigurationException e) { System.out.println(e.getMessage()); } } catch (FactoryConfigurationError e) { System.out.println( "impossible de localiser une classe de construction"); } }
Dans ce cas, j’ai un problème : Comment je peux changer les attributs d’une interface spécifique ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?xml version="1.0" encoding="UTF-8" ?> < application > <interface nom="magic" abscisse="10" ordonnee="20"largeur="700" longueur="600" > <barre nom="jtoolbar1" abscisse="20" ordonnee="0" date="0" exit="0" graver="1" help="0" memory="1" open_bd="1" open_cd="1" open_file="1" open_image="1" oriontation="0" server="0" /> </interface> <interface nom="magic_view" abscisse="100" ordonnee="100" largeur="600" longueur="600" > <barre nom="tools_bar" abscisse="0" ordonnee="0" b_diapo="1" b_exit="1" b_fullscr="1" b_home="1" b_imginfo="1" b_imprimer="1" /> </interface> <interface nom="magic_diaporama" abscisse="100" ordonnee="100" largeur="600" longueur="600" > <barre nom="barre_diapo" abscisse="0" ordonnee="0" faster="1" nom="p" pause="1" play="1" reserve="1" slower="1" stop="1" /> </interface> </application>
Alors j’ai commencé par le parcours du document jusqu’à que je trouve l’interface désirée. Mais je n’ai pas pu changer les valeurs de ses attributs. L’exécution du code a provoqué des erreurs que je n’ai pas pu les corrigées.
Voici la fonction utilisée :
Voici les erreurs :
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 public static void xmlOutputWrite(String cdeName,Magic_Med m)throws Exception {Attr rac ; try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //Récupère une instanxce de la classe DocumentBuilder DocumentBuilder parser = factory.newDocumentBuilder(); //Effectue le parsing avec récupération du noeud DOM Document Document document = parser.parse(cdeName); StreamResult result1=new StreamResult(cdeName ); DOMSource source =new DOMSource(document); Element utilisateur = document.getDocumentElement(); NodeList application = utilisateur.getChildNodes(); //le parcours du document for (int i = 0; i < application.getLength(); i++) { if (application.item(i).getNodeType() == 1) { if ( application.item(i).getNodeName().equals("interface")) { NamedNodeMap interf = application.item(i).getAttributes(); rac=(Attr)interf.item(0); if(rac.getValue().equals("magic")) { //maintenant je suis dans l'interface desirée //changement des valeurs de ses attributs String xpath = "/application/interface"; utilisateur = document.getElementById(xpath); Node result = XPathAPI.selectSingleNode(document, xpath); utilisateur = (Element)result; utilisateur.setAttribute("largeur",String.valueOf(m.getWidth() )); utilisateur.setAttribute("longueur",String.valueOf(m.getHeight() )); utilisateur.setAttribute("abcisse",String.valueOf(m.getX() )); utilisateur.setAttribute("ordonne",String.valueOf(m.getY() )); }}}} try { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); transformer.transform(source,result1); } catch (TransformerConfigurationException e) { System.out.println(e.getMessage()); } } catch (FactoryConfigurationError e) { System.out.println( "impossible de localiser une classe de construction"); } }
S’il vous plait aider moi à résoudre ce problème. Et merci.java.lang.NullPointerException
at XMLReadWrite.xmlOutputWrite(XMLReadWrite.java:590)
at fermer.windowClosing(Magic_Med.java:384)
at java.awt.Window.processWindowEvent(Window.java:1121)
at javax.swing.JFrame.processWindowEvent(JFrame.java:266)
at java.awt.Window.processEvent(Window.java:1079)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Partager