与Dom4J和JDom对XML的操作类似,JDK提供的JavaDom解析器用起来一样方便,在解析XML方面Java DOM甚至更甚前两者一筹!其不足之处在于对XML的增删改比较繁琐,特开篇介绍...

1、XML文件如下:

<?xml version="1.0"  encoding="UTF-8"?>
<address-book>
<contact id="01" type="家庭" >
<name>张三</name>
<address>黄山路666号</address>
<city>阜阳</city>
<province>安徽</province>
<postalcode>236000</postalcode>
<country>中国</country>
<telephone>18056075816</telephone>
</contact>
<contact id="02" type="商务" >
<name>李四</name>
<address>望江西路888号</address>
<city>合肥</city>
<province>安徽</province>
<postalcode>230091</postalcode>
<country>中国</country>
<telephone>13956921922</telephone>
</contact>
<contact id="03" type="同学" >
<name>王五</name>
<address>民主路3号</address>
<city>贵港市</city>
<province>广西</province>
<postalcode>537111</postalcode>
<country>中国</country>
<telephone>13965131384</telephone>
</contact>
<address-book>

2、与XML对应的域对象如下:

public class Contact
{
private String id;
private String type;
private String name;
private String address;
private String city;
private String privince;
private String postalcode;
private String country;
private String telephone; public Contact(String id, String type, String name, String address,
String city, String privince, String postalcode, String country,
String telephone)
{
this.id = id;
this.type = type;
this.name = name;
this.address = address;
this.city = city;
this.privince = privince;
this.postalcode = postalcode;
this.country = country;
this.telephone = telephone;
} public Contact()
{ } //省略Set Get方法 }

3、解析XML的过程

import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; public class ParseXML
{
List<Contact> contacts = new ArrayList<Contact>(); public List<Contact> getContacts()
{
return contacts;
} public ParseXML() throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("YellowBook.xml"); XPathFactory xpf = XPathFactory.newInstance();
XPath xPath = xpf.newXPath();
NodeList nodes = (NodeList) xPath.evaluate("/address-book/contact", doc, XPathConstants.NODESET);
for(int i=0;i<nodes.getLength();i++)
{
Node node=nodes.item(i);
this.contacts.add(nodeToContact(node));
}
} public Contact nodeToContact(Node node) throws Exception
{
XPathFactory xpf = XPathFactory.newInstance();
XPath xPath = xpf.newXPath();
String id=(String) xPath.evaluate("@id", node,XPathConstants.STRING);
String type=(String) xPath.evaluate("@type", node,XPathConstants.STRING);
String name=(String) xPath.evaluate("name", node,XPathConstants.STRING);
String address=(String) xPath.evaluate("address", node,XPathConstants.STRING);
String city=(String) xPath.evaluate("city", node,XPathConstants.STRING);
String province=(String) xPath.evaluate("province", node,XPathConstants.STRING);
String postalcode=(String) xPath.evaluate("postalcode", node,XPathConstants.STRING);
String country=(String) xPath.evaluate("country", node,XPathConstants.STRING);
String telephone=(String) xPath.evaluate("telephone", node,XPathConstants.STRING);
Contact c=new Contact(id, type, name, address, city, province, postalcode, country, telephone);
return c;
}
}

4、对XML操作以及序列化的过程

import java.io.FileOutputStream;
import java.util.Scanner;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
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; public class SerializeXML
{
public void serializeXML(String id) throws Exception
{
Scanner sc=new Scanner(System.in);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("YellowBook.xml"); NodeList nodes=doc.getElementsByTagName("contact");
for(int i=0;i<nodes.getLength();i++)
{
Element e=(Element) nodes.item(i);
if(e.getAttribute("id").equals(id))
{
System.out.println("输入类型:");
String type=sc.nextLine();
e.setAttribute("type", type); NodeList childNodes=e.getChildNodes();
for(int j=0;j<childNodes.getLength();j++)
{
Node childNode=(Node) childNodes.item(j);
if(childNode.getNodeName().equals("name"))
{
System.out.println("输入姓名:");
String name=sc.nextLine();
childNode.setTextContent(name);
}
}
}
} TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
DOMSource domSource=new DOMSource(doc);
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
StreamResult result=new StreamResult(new FileOutputStream("YellowBook.xml"));
transformer.transform(domSource, result);
}
}

5、涉及业务逻辑的处理

import java.util.List;

public class ContactService
{
public Contact findById(String id) throws Exception
{
ParseXML xml=new ParseXML();
List<Contact> contacts=xml.getContacts();
Contact con=new Contact();
for(Contact c:contacts)
{
if(c.getId().equals(id))
{
con=c;
}
}
return con;
} public void updateById(String id) throws Exception
{
SerializeXML serializeXML=new SerializeXML();
serializeXML.serializeXML(id);
}
}

6、测试

public class Main
{
public static void main(String[] args) throws Exception
{
ContactService contactDao=new ContactService();
Contact con=contactDao.findById("01");
System.out.println(con.getName()); contactDao.updateById("02");
}
}

Java Dom对XML的解析和修改操作的更多相关文章

  1. EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法

    带参提交一次查询,从服务器加载新数据.这是一个神奇的方法 $('#dg').datagrid('load',{ code: '01', name: 'name01' }); easyui修改操作的回显 ...

  2. JAva使用DOM读取XML数据(解析)

    原来一切都是有套路的 使用DOM解析XML文档步骤 1.创建解析器工厂对象 DocumentBuildFactory对象 2.由解析器工厂对象创建解析器对象,即DocumentBuilder对象 3. ...

  3. [ java 工具类] xml字符串解析成Map(DOM解析)

    package com.tencent.jungle.wechat.util; import com.google.inject.Singleton; import org.w3c.dom.Docum ...

  4. Dom生成Xml和解析Xml

    xml这样的文件格式在非常多时候都是非常适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比較重要了.在dom中是把每个元素都看做是一个节点Node的,全部页面上的属性.元素等 ...

  5. org.w3c.dom(java dom)解析XML文档

    位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析 ...

  6. 精讲 org.w3c.dom(java dom)解析XML文档

    org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...

  7. 9.XML文件解析

    一.XML简介 XML(EXtensible Markup Language),可扩展标记语言 特点:XML与操作系统.编程语言的开发平台无关 实现不同系统之间的数据交换 作用:数据交互 配置应用程序 ...

  8. java对excel文件内容读写修改操作

    Read.java package domain; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cel ...

  9. xml&dom_sax&dom4j的常见操作

    <? xml version =”1.0” encoding=”GB2312”?> <!-- 学生信息—><?xml-stylesheet type=”text/css” ...

随机推荐

  1. HDU3046_Pleasant sheep and big big wolf

    给一个n*m的数字阵,1表示羊的位置,2表示狼的位置,0表示没有东西,可以通过.在每个格子的4边都可以建立围栏,有围栏的话狼是不能通过的. 现在求最少建立多少围栏能够保证狼无法接触到羊. 题目的模型很 ...

  2. Laravel4快速安装方法,解决Laravel4安装速度慢

    Laravel4原始安装方法 Laravel4 是构建在 Composer 之上的, 之前的安装方法是如下:   composer create-project laravel/laravel you ...

  3. c++11 继承控制:final和override

    c++11 继承控制:final和override #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <str ...

  4. hbase 多个过滤器组合(列表)

    使用FilterList要保证过滤器的顺序需要使用List<Filter> private static void mutilFilterData() throws IOException ...

  5. Mininet 系列实验(五)

    实验内容 实现一个单个交换机的拓扑,添加一个交换机,和N个主机到网络中.交换机和主机之间的每个链路能够设置带宽.延迟时间.以及丢包率.创建一个包含一个交换机和四个主机的网络,使用iperf测试主机之间 ...

  6. 《Linux内核设计与实现》第7章读书笔记

    第七章 链接 一. 链接的概念 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程.可以执行于编译.加载和运行时,由叫做链接器(可实现分离编译)的程序自动执行. 二.静态链接 为了创建静态 ...

  7. 20165218 《网络对抗技术》Exp4 恶意代码分析

    Exp4 恶意代码分析 任务一:系统运行监控 记录分析联网的程序 创建计划任务netstat5218 schtasks /create /TN netstat5218 /sc MINUTE /MO 1 ...

  8. Android Studio 换主题 + 背景图片 + 去掉白色竖线

    1.去掉AS编辑区域右边的白色竖线: 把right margin 设置的大一点就可以了,默认是120 ,设置成 1200就ok了 2.AS主题下载换装 可以去如下网站下载,然后导入jar, 具体用法百 ...

  9. 解决Android SDK Manager更新时出现问题

    使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xm ...

  10. ACF/PACF,残差白噪声的检验问题

    关于自相关.偏自相关: 一.自协方差和自相关系数       p阶自回归AR(p)       自协方差 r(t,s)=E[X(t)-EX(t)][X(s)-EX(s)]       自相关系数ACF ...