Advertisement
Mlaszlo95

Untitled

May 25th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.63 KB | None | 0 0
  1. package evo.teszt;
  2.  
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.io.OutputStreamWriter;
  10. import java.io.StringWriter;
  11.  
  12. import javax.xml.parsers.DocumentBuilder;
  13. import javax.xml.parsers.DocumentBuilderFactory;
  14. import javax.xml.parsers.ParserConfigurationException;
  15. import javax.xml.transform.OutputKeys;
  16. import javax.xml.transform.Transformer;
  17. import javax.xml.transform.TransformerException;
  18. import javax.xml.transform.TransformerFactory;
  19. import javax.xml.transform.dom.DOMSource;
  20. import javax.xml.transform.stream.StreamResult;
  21.  
  22. import org.w3c.dom.*;
  23. import org.xml.sax.InputSource;
  24. import org.xml.sax.SAXException;
  25.  
  26.  
  27.  
  28. public class DeleteXMLtag_test {
  29.     private static String fileLocation = "proba.xml";   // az elérési utvonala a fájlnak
  30.    
  31.     //megpróbálja megnyitni a fájlt
  32.     public static Document tryOpenTheFile() throws ParserConfigurationException, SAXException, IOException {
  33.         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  34.         DocumentBuilder dBuilder = null;
  35.         Document doc = null;
  36.         dBuilder = dbFactory.newDocumentBuilder();
  37.         //ezzel hiba nélkül be lehet olvasni a magyar ékezetes betűket. Különösebben nem volt vele gond, de SAX konvertálása miatt okozhat gondot.Bytokat olvassa ki. Ha hibás karakter van benne nem fogja engedi a működést.
  38.         doc = dBuilder.parse(new InputSource(new FileInputStream(new File(fileLocation))));
  39.         doc.getDocumentElement().normalize();
  40.         return doc;
  41.     }
  42.    
  43.     public static void deleteNoteFromTheXml(String productName, String note, String tag) throws ParserConfigurationException, SAXException, IOException, TransformerException{
  44.         Document doc = tryOpenTheFile();
  45.         NodeList nodes = doc.getElementsByTagName(note);        //beállitjuk melyik note keresünk
  46.  
  47.         for (int i = 0; i < nodes.getLength(); i++) {
  48.           Element goods = (Element)nodes.item(i);
  49.  
  50.           Element name = (Element)goods.getElementsByTagName(tag).item(0);  //tagon belül az értéket kiveszük. Azt amit össze akarunk hasonlitanunk, azzal az értékkkel amit törölni szeretnénk
  51.           String dName = name.getTextContent();
  52.          
  53.           if (dName.equals(productName)) {                  //összehasonlitjuk az elemet azzal a értékkel amit keresünk
  54.              goods.getParentNode().removeChild(goods);      //itt töröljük ki az elemet
  55.              goods.normalize();
  56.              xmlToStringTheValue(doc);                      //vissza irjuk a fájlba amit változtatunk
  57.             }
  58.         }
  59.     }
  60.    
  61.     //vissza fűzi értékeket a fájlba
  62.     public static void xmlToStringTheValue(Document doc) throws TransformerException, IOException {
  63.         //XML fájl formázási stilus
  64.         Transformer transformer = TransformerFactory.newInstance().newTransformer();
  65.         transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  66.         transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");    //formázási fajta, meg lehet változatni vagy törölni is
  67.        
  68.         //Összefűzi az xml értékét azzal a értékkel, amit modositottunk/töröltünk/hozzáadtunks
  69.         StringWriter sw = new StringWriter();
  70.         StreamResult streamresult = new StreamResult(sw);
  71.         transformer.transform(new DOMSource(doc), new StreamResult(sw));
  72.         String strTemp = streamresult.getWriter().toString();
  73.         System.out.println(strTemp);    //kiirja az egész fájl szerekezett a változtatás után
  74.        
  75.         //itt történik a vissza irás a fájlba
  76.         //Nos ezzel a buffer iróval, engedélyezni lehet hogy bármi féle kodolás nélkül vissza irja a magyar ékezetes betűket a fájlba. Bytokat irja vissza. Hiba nélkül.
  77.         BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileLocation, false),"UTF-8"));      //false - hozzá fűzás, //true hozzá irás
  78.         bufferedWriter.write(strTemp);
  79.        
  80.         //lezárjuk és töröljük a buffer
  81.         bufferedWriter.flush();
  82.         bufferedWriter.close();
  83.     }
  84.    
  85.     //példa
  86.     /*<?xml version="1.0" encoding="UTF-8"?>
  87.     <Products>
  88.      <PC_component>
  89.        <item type="cpu">
  90.         <name>Ryzen 5 1600</name>
  91.         <producer>AMD</producer>
  92.         <quantity>1</quantity>
  93.         <price>46000</price>
  94.         <clock>3200</clock>
  95.         <socket>AM4</socket>
  96.         <cpu_cores>6</cpu_cores>
  97.         <manufactorytech>14</manufactorytech>
  98.        </item>
  99.      </PC_component>
  100.     </Products>
  101.     */
  102.     public static void main(String[] args) {
  103.         try {
  104.             deleteNoteFromTheXml("Ryzen 5 1600", "item", "name");
  105.         } catch (ParserConfigurationException | SAXException | IOException | TransformerException e) {
  106.             // TODO Auto-generated catch block
  107.             e.printStackTrace();
  108.         }
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement