与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. iOS 数据库sqlite完整增删改查操作

    1: 创建数据库表格 1.1 — 表格创建使用一个数据库软件快速创建:软件大小14.3M; 下载地址:http://pan.baidu.com/s/1qWOgGoc; 表格创建-> 打开软件,点 ...

  2. vue项目使用eslint

    转载自 https://www.cnblogs.com/hahazexia/p/6393212.html eslint配置方式有两种: 注释配置:使用js注释来直接嵌入ESLint配置信息到一个文件里 ...

  3. HotSpot垃圾收集器GC的种类

      堆内存的结构:

  4. The Best Path HDU - 5883(欧拉回路 && 欧拉路径)

    The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  5. YAPTCHA UVALive - 4382(换元+威尔逊定理)

    题意就是叫你求上述那个公式在不同N下的结果. 思路:很显然的将上述式子换下元另p=3k+7则有 Σ[(p-1)!+1/p-[(p-1)!/p]] 接下来用到一个威尔逊定理,如果p为素数则 ( p -1 ...

  6. Longest Word in Dictionary through Deleting - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Longest Word in Dictionary through Deleting - LeetCode 注意点 长度一样的字符串要按字典序返回较小的 ...

  7. 前端学习 -- Css

    Css:Cascading Style Sheets CSS叫做层叠样式表,用来设置页面中元素的样式.背景颜色.字体颜色.字体大小... 编写位置: 1,内联样式: 将样式编写到标签的style属性中 ...

  8. python学习(24) 使用Xpath解析并抓取美女图片

    Xpath最初用来处理XML解析,同样适用于HTML文档处理.相比正则表达式更方便一些 Xpath基本规则 nodename 表示选取nodename 节点的所有子节点 / 表示当前节点的直接子节点 ...

  9. SSH连接与自动化部署工具paramiko与Fabric

    paramiko paramiko是基于Python实现的SSH2远程安全连接,支持认证及密钥方法.可以实现远程命令执行,文件传输,中间SSH代理等功能,相对于Pexpect,封装层次更高. pip ...

  10. winscp以命令行方式同步服务器数据到PC机磁盘上

    目前服务器上每日会产生备份文件,需要使用winscp工具把备份同步到本地PC机硬盘上.平时都是图形界面用鼠标点击方式来同步的,效率低下,因此编写了winscp自动同步脚本,并加入到计划任务中定时自动运 ...