`
ren2881971
  • 浏览: 109836 次
社区版块
存档分类
最新评论

Dom解析xml,填充对象自己写的小例子

    博客分类:
  • java
 
阅读更多
自己写的小程序,解析xml文件。但是对Element和Node 之间的区别。有一点不太明了。 还需要自己看API文档。
package com.util.XmlUtil;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomDemo implements XmlDocument {

	private Document document;

	public void init() {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			this.document = builder.newDocument();
		} catch (ParserConfigurationException e) {
			System.out.println(e.getMessage());
		}
	}

	@Override
	public void createXml(String fileName) {
		Element root = this.document.createElement("employees");
		this.document.appendChild(root);
		Element employee = this.document.createElement("employee");
		Element name = this.document.createElement("name");
		name.appendChild(this.document.createTextNode("任俊明"));
		employee.appendChild(name);
		Element sex = this.document.createElement("sex");
		sex.appendChild(this.document.createTextNode("男"));
		employee.appendChild(sex);
		Element age = this.document.createElement("age");
		age.appendChild(this.document.createTextNode("23"));
		employee.appendChild(age);
		root.appendChild(employee);
		TransformerFactory tf = TransformerFactory.newInstance();

		try {
			Transformer transformer = tf.newTransformer();
			DOMSource source = new DOMSource(document);
			transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
			StreamResult result = new StreamResult(pw);
			transformer.transform(source, result);
			System.out.println("生成xml文件成功");
		} catch (TransformerConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {

		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	@Override
	public Employee parseXml(String fileName) {
		Employee ee = new DomDemo.Employee();
		try {
			// TODO Auto-generated method stub
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(fileName);
			NodeList nodeList = document.getChildNodes();
			for (int i = 0; i < nodeList.getLength(); i++) {
				Node employee = nodeList.item(i);
				if (employee.getNodeType() != Node.TEXT_NODE) {
					NodeList employeeInfo = employee.getChildNodes();
					for (int j = 0; j < employeeInfo.getLength(); j++) {
						Node info = employeeInfo.item(j);
						if (info.getNodeType() != Node.TEXT_NODE) {
							NodeList infoList = info.getChildNodes();
							for (int k = 0; k < infoList.getLength(); k++) {
								Node attribute = infoList.item(k);
								if (attribute.getNodeType() != Node.TEXT_NODE) {
									String attributeName = attribute
											.getNodeName();
									if (attributeName.equals("name")) {
										ee.setName(attribute.getTextContent());
									} else if (attributeName.equals("sex")) {
										ee.setSex(attribute.getTextContent());
									} else if (attributeName.equals("age")) {
										ee.setAge(attribute.getTextContent());
									}
								}

							}
						}
					}
				}
			}

		} catch (Exception e) {
			// TODO: handle exception
		}
		return ee;
	}

	public List<Employee> parseXml2(String fileName) {
		List<Employee> list = new ArrayList<Employee>();
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(fileName);
			NodeList nl = document.getElementsByTagName("employee");
			for (int i = 0; i < nl.getLength(); i++) {
				Employee ee = new DomDemo.Employee();
				Element employee = (Element) nl.item(i);
				Node nodeName = employee.getElementsByTagName("name").item(0);
				String name = nodeName.getFirstChild().getNodeValue();
				Node nodeSex = employee.getElementsByTagName("sex").item(0);
				String sex = nodeSex.getFirstChild().getNodeValue();
				Node nodeAge = employee.getElementsByTagName("age").item(0);
				String age = nodeAge.getFirstChild().getNodeValue();
				ee.setName(name);
				ee.setSex(sex);
				ee.setAge(age);
				list.add(ee);
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}

	public static void main(String[] args) {
		String fileName = "employees.xml";
		DomDemo dd = new DomDemo();
		List<Employee> list = dd.parseXml2(fileName);
		Iterator<Employee> it = list.iterator();
		while (it.hasNext()) {
			Employee ee = (Employee) it.next();
			System.out.println(ee.getName());
			System.out.println(ee.getSex());
			System.out.println(ee.getAge());
		}
		// dd.init();
		// dd.createXml("employees.xml");
		/*
		 * Employee ee = dd.parseXml("employees.xml");
		 * System.out.println(ee.getName());
		 */
	}

	public class Employee {
		private String name;
		private String sex;
		private String age;

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getSex() {
			return sex;
		}

		public void setSex(String sex) {
			this.sex = sex;
		}

		public String getAge() {
			return age;
		}

		public void setAge(String age) {
			this.age = age;
		}

	}

}

分享到:
评论

相关推荐

    Android Dom解析XML

    总结来说,Android中使用DOM解析XML是一种常见且直观的方式,适合处理小规模的数据。结合ButterKnife库,可以方便地将解析结果与UI组件进行绑定,提高代码的可读性和维护性。但请注意,对于大文件,考虑使用SAX或者...

    xml PULL解析的一个小例子

    这种方式比DOM解析更节省内存,因为它不需要将整个XML文档加载到内存中,而是逐行处理。 在Android项目中,我们可以使用`org.xmlpull.v1.XmlPullParser`接口来实现XML Pull解析。首先,我们需要创建一个`...

    XStream解析xml demo

    本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解XStream的基本用法。XStream的核心概念是通过为Java对象定义一个映射,使得对象的字段与XML元素一一对应。这可以...

    dom生成xml文件

    然后,在解析XML的过程中,可以创建`StudentBean`对象并将数据填充进去: ```java StudentBean studentBean = new StudentBean(); studentBean.setSex(student.getAttribute("学员")); studentBean.setName(student...

    xml2excel,java解析xml文件

    Java作为一种强大的编程语言,提供了多种库来解析XML文件,从而能够读取、操作和处理XML文档中的数据。本篇文章将详细介绍如何在Java中解析XML文件,并以“xml2excel”为例,探讨如何将XML数据转换为Excel格式。 ...

    android解析xml文件的方式

    下面是一个使用DOM解析XML文件的例子: 首先,我们需要创建一个`DocumentBuilderFactory`实例,然后用它创建`DocumentBuilder`。接着,使用`DocumentBuilder`加载XML文件,得到`Document`对象。获取XML文档的根元素...

    利用commons-digester解析xml

    这是一个强大的Java库,它允许开发者通过简单的规则集来解析XML文档,这些规则可以将XML元素与Java对象的创建和操作关联起来。这些规则通常基于XPath表达式,使得我们可以非常灵活地匹配和处理XML结构。 在使用...

    digester解析xml 所需jar包

    首先,`Digester`的核心功能是通过定义规则来将XML元素与Java对象的属性或方法关联,这样在解析XML时,可以自动创建和填充Java对象。例如,XML中的每个元素可以对应一个Java对象,而元素的属性可以设置到对应的对象...

    JavaScript解析XML的方法总结.

    在给定的文件中,主要讨论了如何使用JavaScript来解析XML文件,并提供了一个具体的例子。以下是对这些关键方法的详细解释: #### 1. 加载XML文件 JavaScript解析XML的第一步是加载XML文件。这通常通过创建一个XML...

    天气预报,xml解析

    接着,开始解析XML文档,根据XML结构逐个处理节点。通常,天气预报的XML数据可能包含城市名、日期、温度、湿度等信息,每个元素对应一个或多个节点。通过`parser.next()`遍历XML,使用`parser.getName()`检查当前...

    PB9读写xml实例大全

    可以先解析XML文件,然后利用DataWindow的`LoadXML()`方法将XML数据加载到DataWindow中,从而进行数据展示和操作。同时,DataWindow的`UpdateXML()`方法可以将DataWindow中的数据保存回XML文件。 5. **根据XML文件...

    一个关于递归读取xml 并返回到javaBean的小例子

    在解析XML时,递归函数的核心思想是处理当前元素,并调用自身来处理所有子元素。函数通常接受一个节点作为参数,读取其属性和内容,然后递归地遍历其子节点。对于JavaBean,我们需要预先定义一个类,该类的字段与XML...

    Js解析xml实现省市县简三级联动单成功实例

    - **ActiveXObject**:在IE浏览器中,可以使用`ActiveXObject`创建XMLDOM对象来解析XML文档。 - **document.implementation.createDocument**:非IE浏览器(如Firefox、Chrome等)通常使用这个方法创建一个新的XML...

    android sax解析xml文件

    4. **解析XML文件**:调用`SAXParser`的`parse()`方法,传入XML文件的输入流和事件处理器。 5. **处理回调**:在事件处理器方法中,根据XML元素和属性信息执行相应的业务逻辑。 以下是一个简单的SAX解析XML文件的...

    js解析XML文件实现省市县三级级联下拉菜单

    接下来,我们需要使用JavaScript的DOM(Document Object Model) API来解析XML。在浏览器环境中,`XMLHttpRequest`对象或现代的`fetch` API可以用来从服务器获取XML文件。以下是一个使用`fetch`的例子: ```...

    解析XML

    1. DOM解析:DOM将整个XML文档加载到内存中,形成一棵由节点组成的树形结构,称为DOM树。这样做的优点是可以方便地访问和修改文档的任何部分,但缺点是消耗资源较大,不适合处理大型XML文件。 2. SAX解析:SAX采用...

    XML使用说明 java版本

    在JAVA程序中,我们通常会创建一个`DocumentBuilderFactory`实例,然后通过`newDocumentBuilder()`方法获取`DocumentBuilder`,用于解析XML文件。`DocumentBuilder`的`parse()`方法用于读取XML文件,并将其转换为DOM...

    java和js读取xml数据,处理下拉菜单

    为了构建下拉菜单,我们可以使用DOM解析XML文件,获取数据并填充到HTML的元素中。以下是一个简单的示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c...

    用JOX实现xml和javabean的相互转换

    这个库简化了XML解析和Java对象之间的转换过程,使得开发人员能够更便捷地处理XML数据,特别是在需要在不同系统间传输Java对象或者在Web服务中使用XML作为数据交换格式时。 在本文中,我们首先看到一个Java Bean的...

Global site tag (gtag.js) - Google Analytics