ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

解析XML(分享一下 dom 和 dom4j 解析xml)

2021-07-09 16:31:36  阅读:96  来源: 互联网

标签:XML xml document Element public import 解析 节点


 DOM解析xml

节点:空白节点  文档节点  注释节点  元素节点  属性节点

package com.xml.dom;


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;

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.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.FileOutputStream;
import java.io.IOException;


public class XMLParser {

    private Document document;

    public void getDocument(){
        try {
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            document = documentBuilder.parse("src/main/resources/phone.xml");
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解析xml内容
     */
    public void show(){
        NodeList brands = document.getElementsByTagName("Brand");
        for (int i = 0; i < brands.getLength(); i++) {
            Node node = brands.item(i);  //节点:空白节点  文档节点  注释节点  元素节点  属性节点
            Element element= (Element)node;
            String brandName = element.getAttribute("name");
            System.out.println(brandName);
            NodeList types = node.getChildNodes();
            for (int j = 0; j < types.getLength(); j++) {
                Node typeNode = types.item(j);
                if (typeNode.getNodeType()== Node.ELEMENT_NODE) {
                    Element typeElement= (Element)typeNode;
                    String typeName = typeElement.getAttribute("name");
                    System.out.println("\t"+typeName);
                }
            }
        }
    }

    /**
     * 添加节点
     */
    public void add(){
        Element brand = document.createElement("Brand");
        brand.setAttribute("name","三星");
        Element type = document.createElement("Type");
        type.setAttribute("name","NoteX");
        brand.appendChild(type);
        document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
    }

    /**
     * 保存xml
     */
    public void save(){
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        try {
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
            DOMSource domSource = new DOMSource(document);
            StreamResult streamResult = new StreamResult(new FileOutputStream("src/main/resources/phone.xml"));
            transformer.transform(domSource,streamResult);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 修改xml
     */
    public void update(){
        NodeList brands = document.getElementsByTagName("Brand");
        for (int i = 0; i < brands.getLength(); i++) {
            Element brand=(Element) brands.item(i);
            String value = brand.getAttribute("name");
            if("三星".equals(value)){
                brand.setAttribute("name","SAMSUNG");
            }
        }
    }

    /**
     * 删除节点
     */
    public void delete(){
        NodeList brands = document.getElementsByTagName("Brand");
        for (int i = 0; i < brands.getLength(); i++) {
            Element brand=(Element) brands.item(i);
            String value = brand.getAttribute("name");
            if("SAMSUNG".equals(value)){
                brand.getParentNode().removeChild(brand);
            }
        }
    }

    public static void main(String[] args) {
        XMLParser xmlParser = new XMLParser();
        xmlParser.getDocument();
        //xmlParser.add();
        //xmlParser.update();
        xmlParser.delete();
        xmlParser.save();
        //xmlParser.show();
    }
}

 

 DOM4j解析xml

package com;


import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.util.List;

public class Parser {
    private Document document;

    /**
     * 加载DOM树
     */
    public void getDocument(){
        try {
            SAXReader saxReader=new SAXReader();
            //获取xml文件路径
            URL url=Parser.class.getClassLoader().getResource("phone.xml");
            System.out.println(url);
            document= saxReader.read(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void show(){
        //获取XML根节点
        Element rootElement=document.getRootElement();
        //通过根节点获取子节点
        List<Element> elements=rootElement.elements();
        //循环读取节点内容
        for (Element brandElement:elements){
            String brandName=brandElement.attributeValue("name");
            System.out.println(brandName);
            List<Element> typeElements=brandElement.elements();
            for (Element typeElement:typeElements){
                String typeName=typeElement.attributeValue("name");
                System.out.println(typeName);
            }
        }
    }

    //添加节点
    public void add(){
        Element rootElement=document.getRootElement();
        Element brandElement=rootElement.addElement("Brand");
        brandElement.addAttribute("name","三星");
        Element typeElement=brandElement.addElement("Type");
        typeElement.addAttribute("name","NoteX");
    }

    //修改节点
    public void Update(){
        Element rootElement=document.getRootElement();
        List<Element> elements = rootElement.elements();
        for (Element element:elements){
            String brandName=element.attributeValue("name");
            if("三星".equals(brandName)){
                element.addAttribute("三星","SAMSUNG");
            }
        }
    }

    //删除节点
    public void delete(){
        Element rootElement = document.getRootElement();
        List<Element> elements = rootElement.elements();
        for (Element element : elements) {
            String brandName = element.attributeValue("name");
            if("SAMSUNG".equals(brandName)){
                rootElement.remove(element);
            }
        }
    }

    //对节点操作需保存操作
    public void save(){
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        outputFormat.setEncoding("utf-8");
        try {
            XMLWriter xmlWriter = new XMLWriter(new FileWriter("src/main/resources/phone.xml"),outputFormat);
            xmlWriter.write(document);
            xmlWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Parser xmlParser=new Parser();
        xmlParser.getDocument();
//        xmlParser.show();
        xmlParser.add();
//        xmlParser.Update();
//        xmlParser.delete();

        //操作完记得保存
        xmlParser.save();
    }
}

标签:XML,xml,document,Element,public,import,解析,节点
来源: https://blog.csdn.net/qq_51001054/article/details/118609060

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有