欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java解析XML文件

程序员文章站 2022-06-17 08:29:26
...

本文将简单总结三种不同方式下的xml文件解析,代码及实例截图如下:

一、原生简单的解析,不引入任何jar包

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class XMLHelper {
	
	private String xmlFile;
	private DocumentBuilderFactory dbf;
	private DocumentBuilder db;
	private Document doc = null;
	
	private void init(){
		try {
			File file = new File(xmlFile);
			dbf = DocumentBuilderFactory.newInstance();
			db = dbf.newDocumentBuilder();
			doc = db.parse(file);
		}  catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public XMLHelper(String xmlFile){
		this.xmlFile = xmlFile;
		this.init();
	}
	
	// 根据节点名称获取值
	public List<String> getNodeValueByName(String name){
		List<String> list = new ArrayList<String>();
		NodeList nl = doc.getElementsByTagName(name);
		for(int i = 0; i < nl.getLength(); i++){
			//list.add(nl.item(i).getFirstChild().getNodeValue());
			Element e = (Element) nl.item(i);
			list.add("节点名称:"+e.getTagName()+"|节点内容:"+e.getTextContent());
		}
		return list;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		XMLHelper xh = new XMLHelper("E:/zam.xml");
		System.out.println(xh.getNodeValueByName("first"));
		System.out.println(xh.getNodeValueByName("second"));
	}

}

java解析XML文件

java解析XML文件

二、DOM解析,一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。这里导入dom4j的核心包dom4j-1.6.1.jar进行解析。

import java.io.File;
import java.util.Iterator;
import java.util.List;

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

public class Dom4JTest {
	
	@SuppressWarnings("unchecked")
	public static void getValue(List<Element> list){
	    for (Element element : list) {
	    	if(element != null && element.getText().equals("")){
	    	    System.out.println("节点:" + element.getName() + "----" );
	    	    getValue(element.elements());
	    	}else{
	    	    System.out.println("节点:" + element.getName() + ";值:" + element.getText());
	    	}
	    }
	}
	
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
	    try {
		//1.创建一个xml解析器对象
		SAXReader reader = new SAXReader();
		//2.读取xml文档,返回Document对象
		Document doc = reader.read(new File("E:/zam.xml"));
		// 将xml格式字符串转化为DOM对象
                //org.dom4j.Document document = DocumentHelper.parseText("");
			
		//获取xml文档的根标签
		Element root = doc.getRootElement();  	
			
		//获取当前标签节点下的所有子节点
		Iterator<Element> it = root.elementIterator(); 
		while(it.hasNext()){
		    Element e = it.next();
		    System.out.println("节点:" + e.getName() + ";值:" + e.getText());
		}
			
		List<Element> list = root.elements();
		getValue(list);
			
		//标签:
	        //Element   ELement.element("标签名") //指定名称的第一个子标签
		//Iterator<Element> Element.elementIterator("标签名");// 指定名称的所有子标签
		//List<Element>	 Element.elements(); //获取所有子标签
				
		//属性:
		//String   Element.attributeValue("属性名") //获取指定名称的属性值
		//Attribute    Element.attribute("属性名");//获取指定名称的属性对象	
		//Attribute.getName()  //获取属性名称
		//Attibute.getValue()  //获取属性值
		//List<Attribute>	 Element.attributes();  //获取所有属性对象
		//Iterator<Attribute>		Element.attibuteIterator(); //获取所有属性对象

		//文本:
		//Element.getText();  //获取当前标签的文本
		//Element.elementText("标签名") //获取当前标签的指定名称的子标签的文本内容
			
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
        }

}

java解析XML文件

三、SAX解析,加载一点,读取一点,处理一点。对内存要求比较低,Sun公司提供的内置在jdk中,不需要其他jar包。

import java.io.File;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxTest extends DefaultHandler {
	
    //用来遍历XML文件的开始标签
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        int length = attributes.getLength();
        if(length > 0){
            System.out.println("元素'" + qName + "'的属性是:");
            for(int i=0;i<length;i++){
                System.out.println(" 属性名:" + attributes.getQName(i) + ",属性值: " + attributes.getValue(i));
            }
            System.out.println();
        }
        System.out.print("<" + qName + ">");
    }
 
    //用来遍历XML文件的结束标签
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        System.out.println("<" + qName + "/>");
    }
     
    //文本内容
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        String value = new String(ch, start, length).trim();
        if(!value.equals("")){
        	System.out.print(value);
        }
    }
 
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
    }
     
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
    }
    
    public static void main(String[] args) {
    	try {
    	    //1.创建SAXParser对象  
    	    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    	    //2.调用parse方法
    	    parser.parse(new File("E:/zam.xml"), new SaxTest());	
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    }

}
java解析XML文件

上一篇: java解析xml

下一篇: Java解析XML