changer les valeurs des attributs d'un fichier XML
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 :
Code:
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 > |
Pour changer les valeurs des attributs longueur , largeur , abscisse , ordonnée , j’ai utilisé cette fonction :
Code:
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");
}
} |
Alors maintenant mon fichier XML est le suivant :
Code:
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> |
Dans ce cas, j’ai un problème : Comment je peux changer les attributs d’une interface spécifique ?
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 :
Code:
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");
}
} |
Voici les erreurs :
Citation:
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)
S’il vous plait aider moi à résoudre ce problème. Et merci.