与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. poj3061 Subsequence(尺取)

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  2. 打开eclipse编译后的.class文件

    众所周知,用文本编辑器打开.class文件会乱码.我们可以使用命令行打开.class文件项目结构: 代码: public class Synchronized { public static void ...

  3. Web前端开发神器--WebStorm(JavaScript 开发工具) 8.0.3 中文汉化破解版

    WebStorm(JavaScript 开发工具) 8.0.3 中文汉化破解版 http://www.jb51.net/softs/171905.html WebStorm 是jetbrains公司旗 ...

  4. 51nod 1681 公共祖先 | 树状数组

    51nod 1681 公共祖先 有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另一个未知的平行宇宙,这n人的祖辈关系仍然是树形结构,但他们相互之间的关系却完 ...

  5. js 判断js函数,变量是否存在

    //是否存在指定函数 function isExitsFunction(funcName) {//这里的代码需要用try一下,因为当判断的函数是未定义时 浏览器会报错 try { if (typeof ...

  6. 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密

    我们在前一篇文章中实现了cas4.2.x登录使用mongodb验证方式. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程 也学习参考了cas5.0.x版 ...

  7. java Class.getSimpleName() 的用法

    Usage in android: private static final String TAG = DemoApplication.class.getSimpleName(); public cl ...

  8. 北京联通IPTV 数码视讯 Q1 破解过程

    1. 买个usb转ttl的线,我买的是ch340g,3.8元包邮,店家貌似叫telesky,不重要,买到这货就行,里面有送杜邦线 2. 电脑上安装ch340g驱动,注意不要安装错了,注意电压的设置保持 ...

  9. hdu 3068

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. HDU 6231

    K-th Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...