自己写的小程序,解析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是一种常见且直观的方式,适合处理小规模的数据。结合ButterKnife库,可以方便地将解析结果与UI组件进行绑定,提高代码的可读性和维护性。但请注意,对于大文件,考虑使用SAX或者...
这种方式比DOM解析更节省内存,因为它不需要将整个XML文档加载到内存中,而是逐行处理。 在Android项目中,我们可以使用`org.xmlpull.v1.XmlPullParser`接口来实现XML Pull解析。首先,我们需要创建一个`...
本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解XStream的基本用法。XStream的核心概念是通过为Java对象定义一个映射,使得对象的字段与XML元素一一对应。这可以...
然后,在解析XML的过程中,可以创建`StudentBean`对象并将数据填充进去: ```java StudentBean studentBean = new StudentBean(); studentBean.setSex(student.getAttribute("学员")); studentBean.setName(student...
Java作为一种强大的编程语言,提供了多种库来解析XML文件,从而能够读取、操作和处理XML文档中的数据。本篇文章将详细介绍如何在Java中解析XML文件,并以“xml2excel”为例,探讨如何将XML数据转换为Excel格式。 ...
下面是一个使用DOM解析XML文件的例子: 首先,我们需要创建一个`DocumentBuilderFactory`实例,然后用它创建`DocumentBuilder`。接着,使用`DocumentBuilder`加载XML文件,得到`Document`对象。获取XML文档的根元素...
这是一个强大的Java库,它允许开发者通过简单的规则集来解析XML文档,这些规则可以将XML元素与Java对象的创建和操作关联起来。这些规则通常基于XPath表达式,使得我们可以非常灵活地匹配和处理XML结构。 在使用...
首先,`Digester`的核心功能是通过定义规则来将XML元素与Java对象的属性或方法关联,这样在解析XML时,可以自动创建和填充Java对象。例如,XML中的每个元素可以对应一个Java对象,而元素的属性可以设置到对应的对象...
在给定的文件中,主要讨论了如何使用JavaScript来解析XML文件,并提供了一个具体的例子。以下是对这些关键方法的详细解释: #### 1. 加载XML文件 JavaScript解析XML的第一步是加载XML文件。这通常通过创建一个XML...
接着,开始解析XML文档,根据XML结构逐个处理节点。通常,天气预报的XML数据可能包含城市名、日期、温度、湿度等信息,每个元素对应一个或多个节点。通过`parser.next()`遍历XML,使用`parser.getName()`检查当前...
可以先解析XML文件,然后利用DataWindow的`LoadXML()`方法将XML数据加载到DataWindow中,从而进行数据展示和操作。同时,DataWindow的`UpdateXML()`方法可以将DataWindow中的数据保存回XML文件。 5. **根据XML文件...
在解析XML时,递归函数的核心思想是处理当前元素,并调用自身来处理所有子元素。函数通常接受一个节点作为参数,读取其属性和内容,然后递归地遍历其子节点。对于JavaBean,我们需要预先定义一个类,该类的字段与XML...
- **ActiveXObject**:在IE浏览器中,可以使用`ActiveXObject`创建XMLDOM对象来解析XML文档。 - **document.implementation.createDocument**:非IE浏览器(如Firefox、Chrome等)通常使用这个方法创建一个新的XML...
4. **解析XML文件**:调用`SAXParser`的`parse()`方法,传入XML文件的输入流和事件处理器。 5. **处理回调**:在事件处理器方法中,根据XML元素和属性信息执行相应的业务逻辑。 以下是一个简单的SAX解析XML文件的...
接下来,我们需要使用JavaScript的DOM(Document Object Model) API来解析XML。在浏览器环境中,`XMLHttpRequest`对象或现代的`fetch` API可以用来从服务器获取XML文件。以下是一个使用`fetch`的例子: ```...
1. DOM解析:DOM将整个XML文档加载到内存中,形成一棵由节点组成的树形结构,称为DOM树。这样做的优点是可以方便地访问和修改文档的任何部分,但缺点是消耗资源较大,不适合处理大型XML文件。 2. SAX解析:SAX采用...
在JAVA程序中,我们通常会创建一个`DocumentBuilderFactory`实例,然后通过`newDocumentBuilder()`方法获取`DocumentBuilder`,用于解析XML文件。`DocumentBuilder`的`parse()`方法用于读取XML文件,并将其转换为DOM...
为了构建下拉菜单,我们可以使用DOM解析XML文件,获取数据并填充到HTML的元素中。以下是一个简单的示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c...
这个库简化了XML解析和Java对象之间的转换过程,使得开发人员能够更便捷地处理XML数据,特别是在需要在不同系统间传输Java对象或者在Web服务中使用XML作为数据交换格式时。 在本文中,我们首先看到一个Java Bean的...