`

xml

    博客分类:
  • json
 
阅读更多
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="12">
		<name>编程思想</name>
		<price>85.5</price>
	</book>
	<book id="15">
		<name>核心内容</name>
		<price>39.0</price>
	</book>
</books>

package test.dom;
class Book {
	private int id;
	private String name;
	private float price;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	@Override
	public String toString(){
		return "id:"+this.id+"_书名:"+this.name+"_价格:"+this.price;
	}
}

package test.dom;
import java.io.InputStream;
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.Node;
import org.w3c.dom.NodeList;


public class DomParseService {
	public static void main(String ars[]) throws Exception{
		DomParseService parseTest=new DomParseService();
		InputStream input = parseTest.getClass().getClassLoader().getResourceAsStream("book.xml");
		DomParseService dom = new DomParseService();
		List<Book> books = dom.getBooks(input);
		for(Book book : books){
			System.out.println(book.toString());
		}
	}
	public List<Book> getBooks(InputStream inputStream) throws Exception{
		List<Book> list = new ArrayList<Book>();
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(inputStream);
		Element element = document.getDocumentElement();
		
		NodeList bookNodes = element.getElementsByTagName("book");
		for(int i=0;i<bookNodes.getLength();i++){
			Element bookElement = (Element) bookNodes.item(i);
			Book book = new Book();
			book.setId(Integer.parseInt(bookElement.getAttribute("id")));
			NodeList childNodes = bookElement.getChildNodes();
//			System.out.println("*****"+childNodes.getLength());
			for(int j=0;j<childNodes.getLength();j++){
				if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){
					if("name".equals(childNodes.item(j).getNodeName())){
						book.setName(childNodes.item(j).getFirstChild().getNodeValue());
					}else if("price".equals(childNodes.item(j).getNodeName())){
						book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
					}
				}
			}//end for j
			list.add(book);
		}//end for i
		return list;
	}
}


package test.dom;

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

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 SaxParseService extends DefaultHandler {
	public static void main(String agString[]) throws Exception {
		SaxParseService sax = new SaxParseService();
		InputStream input = sax.getClass().getClassLoader().getResourceAsStream("book.xml");
		List<Book> books = sax.getBooks(input);
		for (Book book : books) {
			System.out.println(book.toString());
		}
	}

	private List<Book> books = null;
	private Book book = null;
	private String preTag = null;// 作用是记录解析时的上一个节点名称
	public List<Book> getBooks(InputStream xmlStream) throws Exception {
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		SaxParseService handler = new SaxParseService();
		parser.parse(xmlStream, handler);
		return handler.getBooks();
	}
	public List<Book> getBooks() {
		return books;
	}
	@Override
	public void startDocument() throws SAXException {
		books = new ArrayList<Book>();
	}
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		if ("book".equals(qName)) {
			book = new Book();
			book.setId(Integer.parseInt(attributes.getValue(0)));
		}
		preTag = qName;// 将正在解析的节点名称赋给preTag
	}
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		if ("book".equals(qName)) {
			books.add(book);
			book = null;
		}
		preTag = null;
		/**
		 * 当解析结束时置为空。这里很重要,例如,当图中画3的位置结束后,会调用这个方法 ,如果这里不把preTag置为null,根据startElement(....)方法,preTag的值还是book,当文档顺序读到图 中标记4的位置时,会执行characters(char[] ch, int start, int length)这个方法,而characters(....)方 法判断preTag!=null,会执行if判断的代码,这样就会把空值赋值给book,这不是我们想要的。
		 */
	}

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		if (preTag != null) {
			String content = new String(ch, start, length);
			if ("name".equals(preTag)) {
				book.setName(content);
			} else if ("price".equals(preTag)) {
				book.setPrice(Float.parseFloat(content));
			}
		}
	}

}


package test;

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

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

public class Dom4jReader {
	public static void main(String arge[]) {
		long lasting = System.currentTimeMillis();
		try {
			File f = new File("src/book.xml");
			SAXReader reader = new SAXReader();
			Document doc = reader.read(f);
			Element root = doc.getRootElement();
			Element foo;
			for (Iterator i = root.elementIterator("book"); i.hasNext();) {
				foo = (Element) i.next();
				System.out.print("书名:" + foo.elementText("name"));
				System.out.println("价格:" + foo.elementText("price"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class SaxReader extends DefaultHandler {
	java.util.Stack tags = new java.util.Stack();
	public SaxReader() {
		super();
	}
	public static void main(String args[]) {
		long lasting = System.currentTimeMillis();
		try {
			SAXParserFactory sf = SAXParserFactory.newInstance();
			SAXParser sp = sf.newSAXParser();
			SaxReader reader = new SaxReader();
			sp.parse(new InputSource("src/book.xml"), reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");
	}
	public void characters(char ch[], int start, int length) throws SAXException {
		String tag = (String) tags.peek();
		if (tag.equals("name")) {
			System.out.print("书名:" + new String(ch, start, length));
		}
		if (tag.equals("price")) {
			System.out.println("价格:" + new String(ch, start, length));
		}
	}
	public void startElement(String uri, String localName, String qName, Attributes attrs) {
		tags.push(qName);
	}
}

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

public class DomReader {
	public static void main(String arge[]) {
		long lasting = System.currentTimeMillis();
		try {
			File f = new File("src/book.xml");
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document doc = builder.parse(f);
			NodeList nl = doc.getElementsByTagName("book");
			for (int i = 0; i < nl.getLength(); i++) {
				System.out.print("书名:" + doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue());
				System.out.println("价格:" + doc.getElementsByTagName("price").item(i).getFirstChild().getNodeValue());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

分享到:
评论

相关推荐

    pugixml读写XML示例

    pugixml是一款轻量级、高性能的C++库,专为XML解析和操作而设计。这个库由Artemev开发,提供了简单易用的API,使得在C++项目中处理XML文档变得非常便捷。本示例将详细介绍如何使用pugixml进行XML的读取和写入操作。 ...

    pb下读写xml文件的例子.rar_pb_pb 读取xml_pb 读取xml文件_pb9 xml_pb下读写xml文件的例子

    在PowerBuilder(简称PB)这个强大的开发环境中,处理XML文件是一项常见的任务。XML(Extensible Markup Language)是一种用于存储和传输数据的通用格式,尤其在跨平台和网络应用中广泛使用。本示例主要探讨如何在...

    tinyxml与tinyxml2

    TinyXML和TinyXML2是两个小型的开源库,专门用于解析和操作XML(eXtensible Markup Language)文档。这两个库都是用C++编写的,为C++开发者提供了方便的接口来读取、写入和操作XML数据。下面将详细介绍这两个库的...

    易语言 xml解析 易语言 xml解析 教程 带源码

    易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关重要的。XML作为一种结构化数据存储和交换格式,广泛应用于网络通信、配置...

    andxml xml解密工具

    andxml汉化版是一个xml文件反编译工具,可与APKTOOL反编译配合使用,APK文件使用APKTool反编译生成XML文件后,就可以直接通过它进行汉化编辑 注意: 1、一键机器翻译会造成某些代码出现翻译错误现象,请人工识别。...

    XML解析工具- TinyXML2 -源代码 - C++

    TinyXML-2 是一个简单、小型、高效的 C++ XML 解析器,可以被轻松集成到其他程序中。它使用文档对象模型(DOM)的方式解析XML,可解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型。 作为XML解析...

    xml2axml反编译AndroidManafest文件

    使用java工具xml2axml.jar反编译AndroidManafest文件 通过xml2axml.jar工具反编译AndroidManafest文件 还原AndroidManafest.xml详细过程: 1、获取到apk 2、解压获取里面的AndroidManifest.xml文件 3、在xml2axml....

    pugixml 一个很好用的XML类

    **Pugixml详解:一个高效易用的XML解析库** 在编程中,XML(Extensible Markup Language)是一种被广泛使用的数据交换格式,特别是在跨平台通信、配置文件和数据存储等领域。为了处理XML文档,开发者通常需要依赖...

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    Oracle数据库系统提供了强大的XML处理能力,这主要体现在其内置的几个PL/SQL包上,如DBMS_XMLDOM、DBMS_XMLPARSER和DBMS_XMLQUERY。这些包为开发者提供了处理XML文档的一整套工具,使得在数据库环境中进行XML数据的...

    Xml完全操作 XML增删改查

    XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文...

    tinyxml2.h tinyxml2.cpp文件

    TinyXML-2,通常以tinyxml2库的形式存在,是一个轻量级的C++库,专门用于解析和操作XML文档。这个库由李·斯坦普(Lee Stemp)开发,设计简洁,易于集成到各种项目中,特别是对于嵌入式系统和资源有限的环境。在给定...

    Qt读写Xml文件,QTreeWidget显示Xml和导出Xml文件

    在Qt框架中,XML文件是一种常见的数据存储格式,它提供了结构化的数据表示方式,便于程序读取和写入。QTreeWidget是Qt提供的一种用于显示树状结构数据的控件,它可以很好地展示XML文件的层次结构。QXml是Qt中的XML...

    tinyxml2解析和创建xml样例

    TinyXML2是一个小型、快速且易于使用的C++库,用于解析和生成XML文档。这个库的设计目标是简单、高效,并且适用于嵌入式系统。在本文中,我们将深入探讨如何使用TinyXML2来解析和创建XML文件,特别是涉及到CDATA区段...

    xml转javaBean,javaBean转xml,xml标签大小写问题,以及对xml特殊符号的处理

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、Web服务、配置文件等领域。本文将深入探讨XML与JavaBean之间的转换、XML标签的大小写规则、XML特殊符号的处理以及CDATA的生成。 ...

    tinyxml2解析XML文件读取数据

    - 库的主要类包括`XMLDocument`(XML文档对象)、`XMLElement`(XML元素)、`XMLText`(XML文本)、`XMLComment`(XML注释)和`XMLAttribute`(XML属性)等。 2. **解析XML文件** - 使用`XMLDocument::LoadFile()...

    基于tinyxml2的xml操作库再封装

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于配置文件、数据交换、文档存储等领域。TinyXML2是轻量级的C++ XML解析库,它提供了简单、直接的方式来读写XML文档。本项目是基于tinyxml2...

    根据xml schema生成xml

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。XML Schema(通常缩写为XSD)则是为XML文档定义结构和数据类型的规范,它允许我们对XML文档进行更严格...

    XMLParser(XML解析代码 C++版)

    XMLParser是一种用于解析XML文档的C++实现,它旨在提供简单、小巧且稳定的解决方案,以处理XML数据。XML,即可扩展标记语言,是用于存储和传输数据的标准格式,广泛应用于配置文件、数据交换和文档结构化等领域。XML...

    matlab读取XML,XML转换为matlab

    XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、数据存储和网络通信等领域。Matlab作为一个强大的数值计算和数据分析环境,也提供了与XML交互的功能,这主要通过XML ...

    Notepad++的XML Tools插件格式化XML文件插件

    (2) 解压Xml Tools 2.4.8 Unicode.zip,关闭Notepad++ (3) 将xmltools子文件夹下的XMLTools.dll拷贝至Notepad++的plugins子文件夹 (4) 将ext_libs子文件夹下的所有dll文件拷贝至Notepad++的根目录(与notepad++.exe...

Global site tag (gtag.js) - Google Analytics