Heim  >  Artikel  >  Backend-Entwicklung  >  Java&Xml-Tutorial (3) Verwenden von DOM zum Ändern des XML-Dateiinhalts

Java&Xml-Tutorial (3) Verwenden von DOM zum Ändern des XML-Dateiinhalts

黄舟
黄舟Original
2017-02-22 14:33:222159Durchsuche

Die DOM-Analysemethode kann auch zum Ändern von XML-Daten verwendet werden. Wir können damit Vorgänge wie das Hinzufügen von Elementen, das Löschen von Elementen, das Ändern von Elementwerten, das Ändern von Elementattributen usw. abschließen.

Unsere XML-Datei hat folgenden Inhalt:
employee.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees>
    <Employee id="1">
        <name>Pankaj</name>
        <age>29</age>
        <role>Java Developer</role>
        <gender>Male</gender>
    </Employee>
    <Employee id="2">
        <name>Lisa</name>
        <age>35</age>
        <role>CSS Developer</role>
        <gender>Female</gender>
    </Employee></Employees>

Wir werden den Inhalt der XML-Datei ändern:
1 Geschlecht des Mitarbeiters ( gender), um den Attributwert „id“ zu ändern. Wenn das Geschlecht männlich (männlich) ist, fügen Sie „M“ zum id-Attributwert hinzu, und wenn das Geschlecht weiblich (weiblich) ist, fügen Sie „F“ hinzu der ID-Attributwert.
2. Ändern Sie den Wert des Namenselements und schreiben Sie alles in Großbuchstaben.
3. Das Element „Geschlecht“ hat keine Bedeutung mehr, wir löschen es.
4. Fügen Sie unter dem Mitarbeiterknoten einen Knoten „Gehalt“ hinzu.
Wenn wir die oben genannten Vorgänge abgeschlossen haben, speichern Sie den Inhalt in einer neuen XML-Datei.
Das Folgende ist der mit DOM analysierte Java-Programmcode:
ModifyXMLDOM.java

package com.journaldev.xml;
import java.io.File;
import java.io.IOException;
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.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class ModifyXMLDOM {

    public static void main(String[] args) {
        String filePath = "employee.xml";
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();

            //update attribute value
            updateAttributeValue(doc);

            //update Element value
            updateElementValue(doc);

            //delete element
            deleteElement(doc);

            //add new element
            addElement(doc);

            //write the updated document to file or console
            doc.getDocumentElement().normalize();
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("employee_updated.xml"));
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.transform(source, result);
            System.out.println("XML file updated successfully");

        } catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
            e1.printStackTrace();
        }
    }

    private static void addElement(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;

        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Element salaryElement = doc.createElement("salary");
            salaryElement.appendChild(doc.createTextNode("10000"));
            emp.appendChild(salaryElement);
        }
    }

    private static void deleteElement(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node genderNode = emp.getElementsByTagName("gender").item(0);
            emp.removeChild(genderNode);
        }

    }

    private static void updateElementValue(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node name = emp.getElementsByTagName("name").item(0).getFirstChild();
            name.setNodeValue(name.getNodeValue().toUpperCase());
        }
    }

    private static void updateAttributeValue(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            String gender = emp.getElementsByTagName("gender").item(0).getFirstChild().getNodeValue();
            if(gender.equalsIgnoreCase("male")){
                //prefix id attribute with M
                emp.setAttribute("id", "M"+emp.getAttribute("id"));
            }else{
                //prefix id attribute with F
                emp.setAttribute("id", "F"+emp.getAttribute("id"));
            }
        }
    }

}

Inhalt der XML-Ausgabedatei:
employee_updated.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees>
    <Employee id="M1">
        <name>PANKAJ</name>
        <age>29</age>
        <role>Java Developer</role>

    <salary>10000</salary></Employee>
    <Employee id="F2">
        <name>LISA</name>
        <age>35</age>
        <role>CSS Developer</role>

    <salary>10000</salary></Employee></Employees>

Original Textadresse: http://www.php.cn/

Die DOM-Analysemethode kann auch zum Ändern von XML-Daten verwendet werden. Wir können damit Vorgänge wie das Hinzufügen von Elementen, das Löschen von Elementen und das Ändern von Elementwerten ausführen. Ändern von Elementattributen usw.
Unsere XML-Datei hat den folgenden Inhalt:
employee.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees>
    <Employee id="1">
        <name>Pankaj</name>
        <age>29</age>
        <role>Java Developer</role>
        <gender>Male</gender>
    </Employee>
    <Employee id="2">
        <name>Lisa</name>
        <age>35</age>
        <role>CSS Developer</role>
        <gender>Female</gender>
    </Employee></Employees>

Wir werden den Inhalt der XML-Datei ändern:
1. Ändern Sie die „ID“ entsprechend der des Mitarbeiters Geschlechtsattributwerte: Wenn das Geschlecht männlich (männlich) ist, fügen Sie „M“ zum ID-Attributwert hinzu, und wenn das Geschlecht weiblich (weiblich) ist, fügen Sie „F“ zum ID-Attributwert hinzu.
2. Ändern Sie den Wert des Namenselements und schreiben Sie alles in Großbuchstaben.
3. Das Element „Geschlecht“ hat keine Bedeutung mehr, wir löschen es.
4. Fügen Sie unter dem Mitarbeiterknoten einen Knoten „Gehalt“ hinzu.
Wenn wir die oben genannten Vorgänge abgeschlossen haben, speichern Sie den Inhalt in einer neuen XML-Datei.
Das Folgende ist der mit DOM analysierte Java-Programmcode:
ModifyXMLDOM.java

package com.journaldev.xml;
import java.io.File;
import java.io.IOException;
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.Document;import org.w3c.dom.Element;
import org.w3c.dom.Node;import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class ModifyXMLDOM {

    public static void main(String[] args) {
        String filePath = "employee.xml";
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);
            doc.getDocumentElement().normalize();

            //update attribute value
            updateAttributeValue(doc);

            //update Element value
            updateElementValue(doc);

            //delete element
            deleteElement(doc);

            //add new element
            addElement(doc);

            //write the updated document to file or console
            doc.getDocumentElement().normalize();
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("employee_updated.xml"));
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.transform(source, result);
            System.out.println("XML file updated successfully");

        } catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
            e1.printStackTrace();
        }
    }

    private static void addElement(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;

        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Element salaryElement = doc.createElement("salary");
            salaryElement.appendChild(doc.createTextNode("10000"));
            emp.appendChild(salaryElement);
        }
    }

    private static void deleteElement(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node genderNode = emp.getElementsByTagName("gender").item(0);
            emp.removeChild(genderNode);
        }

    }

    private static void updateElementValue(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            Node name = emp.getElementsByTagName("name").item(0).getFirstChild();
            name.setNodeValue(name.getNodeValue().toUpperCase());
        }
    }

    private static void updateAttributeValue(Document doc) {
        NodeList employees = doc.getElementsByTagName("Employee");
        Element emp = null;
        //loop for each employee
        for(int i=0; i<employees.getLength();i++){
            emp = (Element) employees.item(i);
            String gender = emp.getElementsByTagName("gender").item(0).getFirstChild().getNodeValue();
            if(gender.equalsIgnoreCase("male")){
                //prefix id attribute with M
                emp.setAttribute("id", "M"+emp.getAttribute("id"));
            }else{
                //prefix id attribute with F
                emp.setAttribute("id", "F"+emp.getAttribute("id"));
            }
        }
    }

}

Inhalt der XML-Ausgabedatei:
employee_updated.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees>
    <Employee id="M1">
        <name>PANKAJ</name>
        <age>29</age>
        <role>Java Developer</role>

    <salary>10000</salary></Employee>
    <Employee id="F2">
        <name>LISA</name>
        <age>35</age>
        <role>CSS Developer</role>

    <salary>10000</salary></Employee></Employees>

Oben Es handelt sich um das Java&Xml-Tutorial (3), das die DOM-Methode zum Ändern des Inhalts von XML-Dateien verwendet. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn