`

解析XML

 
阅读更多

Book.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book isbn="33322">
		<name>《水浒传》</name>
		<price>58</price>
		<author>施耐庵</author>
		<year>元末</year>
	</book>
	<book isbn="33323">
		<name>《西游记》</name>
		<price>58</price>
		<author>吴承恩</author>
		<year>明代</year>
	</book>
</books>

 

DOM方式解析XML:

 

package com.mmsiles.xml;

import java.io.File;

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

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

public class TestDOM {
	public static void main(String[] args) {

		long start = System.currentTimeMillis();
		try {
			// 实例化doc工厂
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			// 实例化Doc构造器
			DocumentBuilder builder = factory.newDocumentBuilder();

			File file = new File("src/xml/Book.xml");
			// 解析XML文件
			Document doc = builder.parse(file);
			// 获取根元素
			Element root = doc.getDocumentElement();
			// 获取节点列表
			NodeList books = root.getChildNodes();
			// 循环节点列表
			for (int i = 0; i < books.getLength(); i++) {
				// 获取某个节点
				Node book = books.item(i);
				if (book.getNodeType() == Node.ELEMENT_NODE) {
					// 获取节点属性值
					String isbn=book.getAttributes().getNamedItem("isbn").getNodeValue();
					System.out.print("isbn :"+isbn+"\t");
					
					//循环子节点
 
					for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){
						if(node.getNodeType()==Node.ELEMENT_NODE){
							if(node.getNodeName().equals("name")){
								String name=node.getFirstChild().getNodeValue();
								System.out.print("名称:"+name+"\t");
							}
							if(node.getNodeName().equals("price")){
								String price=node.getFirstChild().getNodeValue();
								System.out.print("价格:"+price+"\t");
							}
							if(node.getNodeName().equals("author")){
								String author=node.getFirstChild().getNodeValue();
								System.out.print("作者:"+author+"\t");
							}
							if(node.getNodeName().equals("year")){
								String year=node.getFirstChild().getNodeValue();
								System.out.print("年份:"+year+"\n");
							}
						}
						
					}
					
				}
				
//             System.out.println("\n");
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

SAX方式解析XML:该种方式解析时,如果xml文档被格式化,可能存在不可见空格导致打印输出排版问题

package com.mmsiles.xml;

import java.io.File;
import java.util.Stack;

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

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

public class TestSAX extends DefaultHandler {
	Stack<String> tags = new Stack<String>();

	public TestSAX() {
		super();
	}

	// 接收元素中字符数据的通知
	public void characters(char ch[], int start, int length) {
		String tag = tags.peek();
		if (tag.equals("name")) {
			System.out.print("\t" + new String(ch, start, length));
		}
		if (tag.equals("price")) {
			System.out.print("\t" + new String(ch, start, length));
		}
		if (tag.equals("author")) {
			System.out.print("\t" + new String(ch, start, length));
		}
		if (tag.equals("year")) {
			System.out.print("\t" + new String(ch, start, length));
		}
	}

	// 接受文档开始的通知
	public void startElement(String uri, String localName, String qName,
			Attributes attrs) {
		if (qName.equals("book")) {
			System.out.print(attrs.getValue("isbn"));
		}
		tags.push(qName);
	}

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		try {
			//取得SAX工厂
			SAXParserFactory factory=SAXParserFactory.newInstance();
			
			//取得SAX解析器
			SAXParser parser=factory.newSAXParser();
			
			//解析XML文件
			File file=new File("src/xml/Book.xml");
			TestSAX sax=new TestSAX();
			parser.parse(file, sax);
			
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		long end=System.currentTimeMillis();
		System.out.println(end-start);
	}
}

 

JDOM方式解析XML:需要JDOM的jar包支持。http://www.jdom.org

 

DOM4J方式解析XML:需要DOM4J的jar包支持。http://dom4j.org

package com.mmsiles.xml;

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

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

public class TestDOM4J {
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		try {
			// 得到SAX解析器
			SAXReader reader = new SAXReader();

			// 解析XML文件
			File file = new File("src/xml/Book.xml");
			Document doc = reader.read(file);

			// 取得根节点
			Element root = doc.getRootElement();

			// 取得节点列表
			for (Iterator it = root.elementIterator(); it.hasNext();) {
				// 取得某一个子节点
				Element book = (Element) it.next();
				// 取得节点属性
				String isbn = book.attributeValue("isbn");
				System.out.print(isbn+"\t");

				for (int i = 1; i < book.nodeCount(); i++) {
					String str = book.node(i).getText();
					// // 取得名称
					// String name = book.node(1).getText();
					// // 取得价格
					// String price = book.node(2).getText();
					// // 取得作者
					// String author = book.node(3).getText();
					// // 取得年份
					// String year = book.node(4).getText();

					// 打印
					// System.out.print("\t" + name);
					// System.out.print("\t" + price);
					// System.out.print("\t" + author);
					// System.out.print("\t" + year+"\n");
					
                    if(str.contains("\t")){
                    	continue;
                    }
					System.out.print( str+ "\t\t");
				}
				System.out.println();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		long end = System.currentTimeMillis();
		// System.out.println(end-start);
	}

}

 

 

 

分享到:
评论

相关推荐

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xml

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...

    解析xml的jar包

    解析xml

    使用javascript解析xml文件或xml格式字符串中文WORD版

    资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版   内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    纯C语言解析xml字符串

    纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法,并有注解 ...

    SAP解析xml abap解析xml

    sap解析xml报文并将报文内容提取到内表中,附件带有详细的源代码和操作步骤。有注释!

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    Java解析XML工具类--(java源码)

    * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的...

    java解析XML文件

    java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件

    PB 解析XML (代码案例)

    PB 解析XML (代码案例)

    STM32解析XML

    STM32f107应用minixml库解析xml,成功解析,软件仿真通过。适合初次接触STM32解析xml的童鞋们。

    PHP解析XML文档

    PHP解析XML文档,PHP解析XML文档,PHP解析XML文档

    dom4j解析xml字符串

    // 读取并解析XML文档 // SAXReader就是一个管道,用一个流的方式,把xml文件读出来 // // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 // Document document = reader.read...

    解析XML特殊字符方法

    解析XML特殊字符方法有二种 XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符

    python解析xml文件

    python解析xml文件,python语言解析xml文件的常用的有两种方式: 通过MiniDom库解析xml文件 通过ElementTree库解析xml文件

    Dom4j解析XML文档.doc

    Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc

    weblogic无法解析xml解决办法

    有些情况下,在开发web项目中会遇到weblogic无法解析xml的错误,是因为weblogic在解析xml时是调用自己的方法去解析,会产生一些莫名其妙的错误,我们只要在web-inf下添加weblogic.xml让其让出解析权即可.

    解析xml解析xml解析xml解析xml解析xml

    解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml解析xml

    kettle 解析xml xml文档,配合kettle 解析xml stax方法,完整解析案例使用

    与上一个版本一起使用可以可以起到提高效率的目的。本人解析xml的真实文档

    PB解析XML字符串 把XML 变为数据窗口

    PB解析XML字符串 把XML 变为数据窗口,然后可以方便的获取各字段内容,内含源码PB解析XML字符串 把XML 变为数据窗口,然后可以方便的获取各字段内容,内含源码

Global site tag (gtag.js) - Google Analytics