Java Dom对XML的解析和修改操作
与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的解析和修改操作的更多相关文章
- EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法
带参提交一次查询,从服务器加载新数据.这是一个神奇的方法 $('#dg').datagrid('load',{ code: '01', name: 'name01' }); easyui修改操作的回显 ...
- JAva使用DOM读取XML数据(解析)
原来一切都是有套路的 使用DOM解析XML文档步骤 1.创建解析器工厂对象 DocumentBuildFactory对象 2.由解析器工厂对象创建解析器对象,即DocumentBuilder对象 3. ...
- [ java 工具类] xml字符串解析成Map(DOM解析)
package com.tencent.jungle.wechat.util; import com.google.inject.Singleton; import org.w3c.dom.Docum ...
- Dom生成Xml和解析Xml
xml这样的文件格式在非常多时候都是非常适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比較重要了.在dom中是把每个元素都看做是一个节点Node的,全部页面上的属性.元素等 ...
- org.w3c.dom(java dom)解析XML文档
位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析 ...
- 精讲 org.w3c.dom(java dom)解析XML文档
org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...
- 9.XML文件解析
一.XML简介 XML(EXtensible Markup Language),可扩展标记语言 特点:XML与操作系统.编程语言的开发平台无关 实现不同系统之间的数据交换 作用:数据交互 配置应用程序 ...
- java对excel文件内容读写修改操作
Read.java package domain; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cel ...
- xml&dom_sax&dom4j的常见操作
<? xml version =”1.0” encoding=”GB2312”?> <!-- 学生信息—><?xml-stylesheet type=”text/css” ...
随机推荐
- 用Html5与Asp.net MVC上传多个文件
html: <form action="/home/upload" method="post" enctype="multipart/form- ...
- 将javaweb项目部署到阿里云服务器
主要步骤:1. 购买阿里云服务器2. 远程连接3. 在云服务器上配javaweb环境:jdk,tomcat,MySQL4. 将项目的war文件放到Tomcat下关于云服务器ECS:如果还想在买服务器之 ...
- python selenium2 定位一组元素find_elements实例
打开hao123首页,需要定位以上区域中的所有链接,他们有相同的父元素<ul class="js_bd site-bd site-hd0">,所有链接处在li>a ...
- hbase 原子操作cas
在高并发的情况下,对数据row1 column=cf1:qual1, timestamp=1, value=val1的插入或者更新可能会导致非预期的情况, 例如:原本客户端A需要在value=val ...
- GIT 旧库迁移到新库
1.在gitlab创建新项目,得到SSH地址2.用gitextent打开旧项目,记得所有分支合并成一个(如果确实无法合并,则需要一个个复位推送)3.复位到需要推送的节点分支4.打开菜单栏的档案库,管理 ...
- 【题解】CF#896 D-Nephren Runs a Cinema
容易发现这些 vip 用户并没什么用,所以考虑枚举手持50元与100元的人共有多少个.设手持50元的人 \(a\) 个,手持100元的人 \(a - k\) 个,那么一共是 \(2*a - k\) 个 ...
- 【刷题】BZOJ 2588 Spoj 10628. Count on a tree
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1(zz)
android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1 http://blog.cs ...
- 仿微博的JQuery日历控件
实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数. 日历控件网上一搜一大把,但是我觉得自己写一遍还是有好处的.代码可以查看本页源代 ...
- 哲学家问题(java)的三个解法
//加synchronize进行同步 //释放资源又很快获得自身的资源,这样不妥,吃完的话休息100ms //每个人先申请编号小的筷子 public class Philosopher impleme ...