Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package evo.teszt;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.io.StringWriter;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.transform.OutputKeys;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerException;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- import org.w3c.dom.*;
- import org.xml.sax.InputSource;
- import org.xml.sax.SAXException;
- public class DeleteXMLtag_test {
- private static String fileLocation = "proba.xml"; // az elérési utvonala a fájlnak
- //megpróbálja megnyitni a fájlt
- public static Document tryOpenTheFile() throws ParserConfigurationException, SAXException, IOException {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = null;
- Document doc = null;
- dBuilder = dbFactory.newDocumentBuilder();
- //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.
- doc = dBuilder.parse(new InputSource(new FileInputStream(new File(fileLocation))));
- doc.getDocumentElement().normalize();
- return doc;
- }
- public static void deleteNoteFromTheXml(String productName, String note, String tag) throws ParserConfigurationException, SAXException, IOException, TransformerException{
- Document doc = tryOpenTheFile();
- NodeList nodes = doc.getElementsByTagName(note); //beállitjuk melyik note keresünk
- for (int i = 0; i < nodes.getLength(); i++) {
- Element goods = (Element)nodes.item(i);
- 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
- String dName = name.getTextContent();
- if (dName.equals(productName)) { //összehasonlitjuk az elemet azzal a értékkel amit keresünk
- goods.getParentNode().removeChild(goods); //itt töröljük ki az elemet
- goods.normalize();
- xmlToStringTheValue(doc); //vissza irjuk a fájlba amit változtatunk
- }
- }
- }
- //vissza fűzi értékeket a fájlba
- public static void xmlToStringTheValue(Document doc) throws TransformerException, IOException {
- //XML fájl formázási stilus
- Transformer transformer = TransformerFactory.newInstance().newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); //formázási fajta, meg lehet változatni vagy törölni is
- //Összefűzi az xml értékét azzal a értékkel, amit modositottunk/töröltünk/hozzáadtunks
- StringWriter sw = new StringWriter();
- StreamResult streamresult = new StreamResult(sw);
- transformer.transform(new DOMSource(doc), new StreamResult(sw));
- String strTemp = streamresult.getWriter().toString();
- System.out.println(strTemp); //kiirja az egész fájl szerekezett a változtatás után
- //itt történik a vissza irás a fájlba
- //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.
- BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileLocation, false),"UTF-8")); //false - hozzá fűzás, //true hozzá irás
- bufferedWriter.write(strTemp);
- //lezárjuk és töröljük a buffer
- bufferedWriter.flush();
- bufferedWriter.close();
- }
- //példa
- /*<?xml version="1.0" encoding="UTF-8"?>
- <Products>
- <PC_component>
- <item type="cpu">
- <name>Ryzen 5 1600</name>
- <producer>AMD</producer>
- <quantity>1</quantity>
- <price>46000</price>
- <clock>3200</clock>
- <socket>AM4</socket>
- <cpu_cores>6</cpu_cores>
- <manufactorytech>14</manufactorytech>
- </item>
- </PC_component>
- </Products>
- */
- public static void main(String[] args) {
- try {
- deleteNoteFromTheXml("Ryzen 5 1600", "item", "name");
- } catch (ParserConfigurationException | SAXException | IOException | TransformerException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement