`
xkxjy
  • 浏览: 43811 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

XML 解析实例

    博客分类:
  • java
阅读更多

java 解析xml实例

import java.io.*; //Java基础包,包含各种IO操作 
import java.util.*; //Java基础包,包含各种标准数据结构操作 
import javax.xml.parsers.*; //XML解析器接口 

import org.w3c.dom.*; //XML的DOM实现 
import org.apache.crimson.tree.XmlDocument;//写XML文件要用到

public class XMLTest{
	public static Vector<StudentInfo> getAll(String file)
			throws Exception {
		Vector<StudentInfo> students = new Vector<StudentInfo>();
		// 为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = null;
		try {
			db = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			System.err.println(pce); // 出异常时输出异常信息,然后退出,下同
			System.exit(1);
		}

		Document doc = null;
		try {
			doc = db.parse(file);
		} catch (DOMException dom) {
			System.err.println(dom.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
			System.err.println(ioe);
			System.exit(1);
		}
		
		// 先取根元素 students
		Element root = doc.getDocumentElement();
		// 取 student 元素列表
		NodeList nStudents = root.getElementsByTagName("student");
		for (int i = 0; i < nStudents.getLength(); i++) {
			// 依次取每个 user 元素
			Element eStudent = (Element) nStudents.item(i);
			// 创建一个 user 的Bean实例
			StudentInfo sInfo = new StudentInfo();
			// 取user name 属性
			sInfo.name = eStudent.getAttribute("name");

			// 取 sex 元素,下面类同
			NodeList nlSex = eStudent.getElementsByTagName("sex");
			if (nlSex.getLength() == 1) {
				Element e = (Element) nlSex.item(0);
				Text t = (Text) e.getFirstChild();
				sInfo.sex = t.getNodeValue();
			}

			// age
			NodeList nlAge = eStudent.getElementsByTagName("age");
			if (nlAge.getLength() == 1) {
				Element e = (Element) nlAge.item(0);
				Text t = (Text) e.getFirstChild();
				sInfo.age = Integer.parseInt(t.getNodeValue());
			}
			
			students.add(sInfo);
		}
		
		return students;
	}
	public static boolean addNode(String file, StudentInfo student)
		throws Exception{
		//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = null;
		try {
			db = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			System.err.println(pce);
			System.exit(1);
		}

		Document doc = null;
		try {
			doc = db.parse(file);
		} catch (DOMException dom) {
			System.err.println(dom.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
			System.err.println(ioe);
			System.exit(1);
		}
		//没有此用户名才添加
		if (isNameExists(doc, student.name) == null) {
			// 先取根元素 students
			Element root = doc.getDocumentElement();

			// 下面建立一个student节点,并具有name属性
			Element eStudent = doc.createElement("student");
			eStudent.setAttribute("name", student.name);
			root.appendChild(eStudent);
			
			// 建立 sex 元素,添加到 student 下面,下同
			Element eSex = doc.createElement("sex");
			eStudent.appendChild(eSex);
			Text tSex = doc.createTextNode(student.sex);
			eSex.appendChild(tSex);
			//
			Element eAge = doc.createElement("age");
			eStudent.appendChild(eAge);
			Text tAge = doc.createTextNode("" + student.age);
			eAge.appendChild(tAge);

			// 把XML文档输出到指定的文件
			FileOutputStream outStream = new FileOutputStream(file);
			OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
			((XmlDocument) doc).write(outWriter, "GB2312");
			outWriter.close();
			outStream.close();
			
			return true;
		}
		
		return false;
	}
	
	public static boolean removeByName(String file, String name)
		throws Exception{
		//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = null;
		try {
			db = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			System.err.println(pce); // 出异常时输出异常信息,然后退出,下同
			System.exit(1);
		}

		Document doc = null;
		try {
			doc = db.parse(file);
		} catch (DOMException dom) {
			System.err.println(dom.getMessage());
			System.exit(1);
		} catch (IOException ioe) {
			System.err.println(ioe);
			System.exit(1);
		}
		
		Element old = isNameExists(doc, name);
		if(old != null){
			Element root = doc.getDocumentElement();
			if(root.removeChild(old) != null){
				// 把XML文档输出到指定的文件
				FileOutputStream outStream = new FileOutputStream(file);
				OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
				((XmlDocument) doc).write(outWriter, "GB2312");
				outWriter.close();
				outStream.close();
				return true;			
			}
		}
		
		return false;
		
	}
	//查找指定用户名是否存在,如果存在返回此节点,否则返回null
	private static Element isNameExists(Document doc, String name)
		throws Exception{
		
		//先取根元素 students
		Element root = doc.getDocumentElement();
		// 取 student 元素列表
		NodeList students = root.getElementsByTagName("student");
		for (int i = 0; i < students.getLength(); i++) {
			// 依次取每个 user 元素
			Element student = (Element) students.item(i);

			//找到了
			if (name.equals(student.getAttribute("name"))) {
				//System.out.println("I'm here");
				//System.out.println(user);
				return student;
			}
		}
		
		return null;
	}
}
class StudentInfo{
	//
	String name;
	String sex;
	int age;
	//
	public StudentInfo(){}
	public StudentInfo(String name, String sex, int age) {
		//super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return name + " is a " + sex + ", and age is " + age;
	}	
}

 附件是相关jar包

 

分享到:
评论

相关推荐

    xml解析实例

    在这个"xml解析实例"中,我们将探讨如何在VC++环境中创建一个DLL(动态链接库),该库能够解析自定义格式的XML数据,并在其他工程中调用这些功能。 首先,了解XML解析的基本概念至关重要。XML文档由一系列元素组成...

    XML解析实例

    总之,XML解析实例为我们提供了实践和理解如何在代码中处理XML数据的机会。无论是选择DOM还是SAX,了解其工作原理和使用方式都是IT从业者必备的技能之一。通过学习和研究这个实例,我们可以加深对XML解析的理解,并...

    vb_ XML解析实例 .zip_WH_CBT_vb xml_vb 解析xml文件_visual basic_解析

    总之,这个VB XML解析实例提供了一个基础平台,帮助开发者学习如何在VB环境下读取、解析XML文件,并将结构可视化。通过这个实例,你可以了解XML与VB之间的交互,以及如何使用DOM模型处理XML文档。实践这个例子,将有...

    XML解析实例(使用了CMarkup类)

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、网络通信、数据存储等领域。...通过学习和实践这个实例,我们可以更深入地理解和掌握XML解析技术,并将其应用于实际项目中。

    okHttp访问返回JSON,XML解析实例

    JSON解析可以借助Gson库,XML解析可以使用`XmlPullParser`或第三方库。在WebView中加载服务器返回的HTML内容,可以利用`loadData`或`loadDataWithBaseURL`方法。这些技术在Android开发中至关重要,能有效提升应用的...

    androidXML解析实例代码

    接下来,我们需要创建一个`SAXParserFactory`实例,然后使用它来获取`SAXParser`,并设置XML解析器的配置。最后,我们调用`parse()`方法解析XML文件,并传入我们的事件处理器: ```java public static void parse...

    XML解析实例代码SAXDemo.rar

    总之,SAXDemo实例代码提供了一个基础的SAX解析XML文档的例子,对于学习和理解XML解析,特别是大型文件的处理,是非常有价值的。通过阅读和分析这个代码,你可以掌握如何使用SAX解析器解析XML,以及如何处理解析过程...

    java四种xml解析实例和jar包,包括dom,sax,dom4j,jdom等方式

    java四种xml解析实例和jar包,包括dom,sax,dom4j,jdom等方式 java四种xml解析实例和jar包,包括dom,sax,dom4j,jdom等方式 是学习Java的xml解析的好例子,包括相应的dom4j.jar,jdom.jar等,自己整理的,物超所值啊,...

    JAVA XML解析实例

    JDOM是专门为Java设计的XML解析库,它提供了更直观的API,使得XML处理更像操作Java对象。JDOM基于DOM,但在性能和易用性上有所改进。我们可以使用`org.jdom2.Document`和`org.jdom2.input.SAXBuilder`来构建和解析...

    iOS XML解析实例

    本实例将介绍如何在iOS项目中使用KISSXML库进行XML解析。 KISSXML是一个强大的、Objective-C实现的XML解析库,它提供了XML解析和生成的功能,适用于iOS和macOS平台。导入KISSXML库到你的项目中,你可以通过简单的...

    php解析xml实例

    php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例php解析xml实例

    android XML本地解析实例

    二、Android中的XML解析实例 1. DOM解析实例: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = ...

    tinyXML解析实例源码(VS2008编写)

    TinyXML是一个开源的轻量级XML解析库,适用于C++编程。它被设计为简单、易用且小巧,便于在嵌入式系统或资源有限的环境中使用。在本实例中,我们将探讨如何使用TinyXML库在Visual Studio 2008环境下解析XML文档。 ...

    SAX解析XML文件实例

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

    PB11.5解析XML实例

    总结一下,PB11.5中的XML解析实例主要涵盖了以下几个方面: 1. DOM和SAX解析方式的介绍与选择。 2. 使用`IXMLDocument`接口加载、查询和操作XML。 3. `IXMLDOMElement`和`IXMLDOMAttribute`接口的使用,包括元素和...

    4种解析XML方法实例

    本教程将详细介绍四种常见的XML解析方法,以帮助你更好地理解和处理XML数据。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点操作来访问和修改...

    JAVA 解析XML生成XML文档实例

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

    xml航班解析实例

    本实例——“xml航班解析实例”,提供了一个全项目的压缩包,包含了源代码和注释,方便个人学习和理解XML解析在安卓应用中的具体应用。 在安卓应用中,XML解析主要分为两种方式:DOM(Document Object Model)解析...

Global site tag (gtag.js) - Google Analytics