java 解析xml文件样例

本文分享了一个用于Java中解析XML文件的实用工具类XMLFileUtil。该类封装了加载XML文件、获取元素及属性值等操作,并提供了详细的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近需要用到java解析xml文件,在网上找了些资料,然后封装了个xmlFileUtil类,现在和大家分享下:

 

xml文件样例:<?xml version="1.0" encoding="UTF-8"?><xml-body><cardcode><name>name</name><value>value</value></cardcode></xml-body>

 

xmlFileUtil类:

 

package rosten;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
import java.util.ArrayList;

public class XMLFileUtil {
    // Document可以看作是XML在内存中的一个镜像,那么一旦获取这个Document 就意味着可以通过对
    // 内存的操作来实现对XML的操作,首先第一步获取XML相关的Document
    private Document xmlDoc;
    private Element root;

    public void LoadXmlFile(String filePath) throws Exception {

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        // 这个Document就是一个XML文件在内存中的镜像
        this.setXmlDoc(db.parse(new File(filePath)));
        this.setXmlElement(this.getXmlDoc().getDocumentElement());

    }

    @SuppressWarnings("unchecked")
    // 通过属性名获取elemntes 样例:<code name="codeName"> return 为:codeName
    public  Element[] getElementsByName(Element parent, String name) {
        ArrayList resList = new ArrayList();
        NodeList nl = getNodeList(parent);
        for (int i = 0; i < nl.getLength(); i++) {
            Node nd = nl.item(i);
            if (nd.getNodeName().equals(name)) {
                resList.add(nd);
            }
        }
        Element[] res = new Element[resList.size()];
        for (int i = 0; i < resList.size(); i++) {
            res[0] = (Element) resList.get(i);
        }

        return res;
    }

    // 获取element下面所有的子节点
    public  NodeList getNodeList(Element parent) {
        return parent.getChildNodes();
    }

    // 获取elements的名称<code></code>return为:code
    public  String getElementName(Element element) {
        return element.getNodeName();
    }

    public  String getElementValueByName(Node node, String name) {
       
        for(Node nd =node.getFirstChild();nd!=null;nd=nd.getNextSibling()){
            if(nd.getNodeType()==Node.ELEMENT_NODE){
               
                if(nd.getNodeName().equals(name)){
                    return nd.getFirstChild().getNodeValue();
                }
            }
        }
       
        return null;

    }

    // 获取element值<code>aa</code> return为:aa
    public  String getElementValue(Element element) {
        NodeList nl = element.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++) {
            if (nl.item(i).getNodeType() == Node.TEXT_NODE)// 是一个Text Node
            {
                return element.getFirstChild().getNodeValue();
            }
        }

        return null;
    }

    public  String getElementAttr(Element element, String attr) {
        return element.getAttribute(attr);
    }

    public  void setElementValue(Element element, String val) {
        Node node = element.getOwnerDocument().createTextNode(val);
        NodeList nl = element.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++) {
            Node nd = nl.item(i);
            if (nd.getNodeType() == Node.TEXT_NODE)// 是一个Text Node
            {
                nd.setNodeValue(val);
                return;
            }
        }
        element.appendChild(node);
    }

    public  void setElementAttr(Element element, String attr,
            String attrVal) {
        element.setAttribute(attr, attrVal);
    }

    public static void addElement(Element parent, Element child) {
        parent.appendChild(child);
    }

    public  void addElement(Element parent, String tagName) {
        Document doc = parent.getOwnerDocument();
        Element child = doc.createElement(tagName);
        parent.appendChild(child);
    }

    public  void addElement(Element parent, String tagName, String text) {
        Document doc = parent.getOwnerDocument();
        Element child = doc.createElement(tagName);
        setElementValue(child, text);
        parent.appendChild(child);
    }

    public  void removeElement(Element parent, String tagName) {
        NodeList nl = parent.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++) {
            Node nd = nl.item(i);
            if (nd.getNodeName().equals(tagName)) {
                parent.removeChild(nd);
            }
        }
    }

    public void setXmlDoc(Document xmlDoc) {
        this.xmlDoc = xmlDoc;
    }

    public Document getXmlDoc() {
        return xmlDoc;
    }

    public void setXmlElement(Element xmlElement) {
        this.root = xmlElement;
    }

    public Element getXmlElement() {
        return root;
    }

}

 

使用方法:

package rosten;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class praseXml01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        XMLFileUtil xmlDeal = new XMLFileUtil();
       
        try {
            xmlDeal.LoadXmlFile("d:/MyXml.xml");
            NodeList allNode = xmlDeal.getNodeList(xmlDeal.getXmlElement());
           
            if(allNode==null){
                System.out.println("xml文件中不包含任何信息.....");
                return;
            }
           
            for(int i=0;i<allNode.getLength();i++){
                Node node = allNode.item(i);
                if(node.getNodeType()==Node.ELEMENT_NODE){
                       
                    if(xmlDeal.getElementValueByName(node, "name")!=null){
                        System.out.println("name:" + xmlDeal.getElementValueByName(node, "name"));
                    }
                   
                    if(xmlDeal.getElementValueByName(node, "value")!=null){
                        System.out.println("value :" +xmlDeal.getElementValueByName(node, "value"));
                    }
                   
                }
            }
           
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值