java 从零开始,学习笔记之基础入门<DOM解析>(三十二)
来源:互联网 发布:mount windows共享目录 编辑:程序博客网 时间:2024/05/23 01:18
DOM解析
DOM解析一
基础知识
TestXMLParseDemo
package com.ibm.xmldemo;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TestXMLParseDemo {
public static void main(String[] args) {
try {
//首先获取DocumentBuilder对象
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//通过DocumentBuilder对象加载需要解析的dom文件
Document document;
document = builder.parse(new File("D:/web/xml/one.xml"));
//调用document的getChildNodes()方法返回的是文件的子节点,即所有文件内容的根节点
NodeList nl=document.getChildNodes();
System.out.println(nl.getLength());
//通过document的getDocumentElement()方法获得根节点
Element root=document.getDocumentElement();
String name=root.getNodeName();
System.out.println("----"+name);
String rname=root.getAttribute("name");
System.out.println(rname);
String raddress=root.getAttribute("addr");
System.out.println(raddress);
//获得根节点的所有属性
//在我们不知道有多少属性的情况下,通过循环
NamedNodeMap nm=root.getAttributes();
// System.out.println(nm.item(0).getNodeName());
// System.out.println(nm.item(1).getNodeName());
for(int i=0;i<nm.getLength();i++){
Node n=nm.item(i);
// System.out.println(n.getNodeName()+"="+n.getNodeValue());
}
//获取根节点下的子节点
NodeList nl2=root.getChildNodes();
// System.out.println(nl2.getLength());
//遍历所有子节点
for (int i = 0; i < nl2.getLength(); i++) {
Node n2=nl2.item(i);
// System.out.println(n2.getNodeName()+"="+n2.getNodeValue());
}
//获得所有班级
NodeList nlist = root.getElementsByTagName("class");
for (int i = 0; i < nlist.getLength(); i++) {
Node c = nlist.item(i);
//获得班级所有属性
// NamedNodeMap nm2=c.getAttributes();
// for (int j = 0; j < nm2.getLength(); j++) {
// Node cn=nm2.item(j);
// System.out.println(cn.getNodeName()+"="+cn.getNodeValue());
// System.out.println("******************");
// }
NodeList nl3=c.getChildNodes();
for (int j = 0; j < nl2.getLength(); j++) {
Node stu=nl3.item(j);
if(stu.getNodeName().equals("student")){
NamedNodeMap nm3=stu.getAttributes();
for (int k = 0; k < nm3.getLength(); k++) {
Node sn=nm3.item(k);
System.out.println(sn.getNodeName()+"=="+sn.getNodeValue());
}
System.out.println("***");
}
}
System.out.println("-----------");
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
}
循环进行排版
TestInfo
package com.ibm.xmldemo;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TestInfo {
public static void main(String[] args) {
try {
DocumentBuilder builder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=builder.parse(new File("D:/web/xml/one.xml"));
Element root = doc.getDocumentElement();
//获得根节点下的所有属性
NamedNodeMap nm=root.getAttributes();
for (int i = 0; i < nm.getLength(); i++) {
Node n = nm.item(i);
System.out.println(n.getNodeName()+"=="+n.getNodeValue());
}
//根据根节点获得所有的子节点
NodeList nl=root.getElementsByTagName("class");
for (int i = 0; i < nl.getLength(); i++) {
Node n2=nl.item(i);
//获得班级所有属性
NamedNodeMap nm2=n2.getAttributes();
for (int j = 0; j < nm2.getLength(); j++) {
Node n3=nm2.item(j);
System.out.print(n3.getNodeName()+"=="+n3.getNodeValue()+" ");
}
System.out.println();
System.out.println("学生信息");
//获得班级所有学生信息
NodeList nl2=n2.getChildNodes();
for (int j = 0; j < nl2.getLength(); j++) {
//获得班级中的一个节点
Node n4=nl2.item(j);
if("student".equals(n4.getNodeName())){
NamedNodeMap nm3=n4.getAttributes();
for (int k = 0; k < nm3.getLength(); k++) {
Node n5=nm3.item(k);
System.out.print(n5.getNodeName()+"=="+n5.getNodeValue()+" ");
}
System.out.println();
}
}
System.out.println("**********班级信息*************************************");
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
}
Javabean解析xml
College.java
package com.ibm.bean;
import java.util.Map;
public class College {
private Stringname;
private String id;
private Stringaddr;
private Map<String,MyClass>map;
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddr() {
return addr;
}
publicvoid setAddr(String addr) {
this.addr = addr;
}
public Map<String, MyClass> getMap() {
return map;
}
publicvoid setMap(Map<String, MyClass> map) {
this.map = map;
}
}
MyClass.java
package com.ibm.bean;
import java.util.Map;
public class MyClass {
private String name;
private String code;
private String num;
private Map<String,Student> map;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getNum() {
returnnum;
}
publicvoid setNum(String num) {
this.num = num;
}
public Map<String, Student> getMap() {
return map;
}
public void setMap(Map<String, Student> map) {
this.map = map;
}
}
Student.java
package com.ibm.bean;
public class Student {
private String name;
private String sno;
private String sex;
private String age;
public String getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
public String getSno() {
returnsno;
}
publicvoid setSno(String sno) {
this.sno = sno;
}
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;
}
}
XMLDom4J.java
package com.ibm.bean;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XMLDom4J {
/**
* @param args
*/
public staticvoid main(String[] args) {
Map<String, MyClass> map=new HashMap<String, MyClass>();
Map<String, Student> smap=new HashMap<String, Student>();
File xml=new File("d:/web/xml/one.xml");
College coll=new College();
Student stu=new Student();
try {
//Classcl=Class.forName("com.ibm.bean.College");
Class cl=coll.getClass();
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=db.parse(xml);
//将doc中的内容读取到coll对象中
//首先获取到根节点
Element root=doc.getDocumentElement();
NamedNodeMap nm=root.getAttributes();
//我们并不知道文件中属性对应于bean中的哪个属性,这时可以采用反射
//先遍历所有根节点的属性
Map<String, College> mc1=new HashMap<String, College>();
for (int i = 0; i < nm.getLength(); i++) {
Node att1=nm.item(i);
String att1name=att1.getNodeName();
String att1value=att1.getNodeValue();
//将属性的首字母改为大写,在前面加上"set",就是对应的set方法
String setN="set"+att1name.substring(0,1).toUpperCase()+att1name.substring(1);
// System.out.println(att1name+":"+setN);
//将属性值传递给coll对象
Method m = cl.getMethod(setN, String.class);
m.invoke(coll, att1value);
}
// System.out.println("学校属性:***************");
//取得college所有的子节点
MyClass mc = new MyClass();
NodeList n = root.getElementsByTagName("class");
String code="";
for (int i = 0; i < n.getLength(); i++) {
//创建Class节点对象cla
Node cla=n.item(i);
//创建一个MyClass对象来装一个class标签的内容
//反射机制
Class mcLoder=mc.getClass();
NamedNodeMap nm2 =cla.getAttributes();
//班级
for (int j = 0; j < nm2.getLength(); j++)
{
Node att2=nm2.item(j);
String att2name=att2.getNodeName();
String att2value=att2.getNodeValue();
if("code".equals(att2name))
{
code=att2value;
}
String setN2="set"+att2name.substring(0,1).toUpperCase()+att2name.substring(1);
// System.out.println(att2name+":"+setN2);
Method mm=mcLoder.getMethod(setN2, String.class);
mm.invoke(mc, att2value);
}
//取得class子节点student属性
Class clstu=stu.getClass();
NodeList nds1=cla.getChildNodes();
for (int j = 0; j < nds1.getLength(); j++) {
//得到对象为student子节点对象
Node stund2=nds1.item(j);
if(stund2.getNodeName().equals("student")){
String sno="";
NamedNodeMap stunnm=stund2.getAttributes();
for (int k = 0; k < stunnm.getLength(); k++) {
Node stunode=stunnm.item(k);
String att3name=stunode.getNodeName();
String att3value=stunode.getNodeValue();
if("sno".equals(stunode.getNodeName())){
sno=att3value;
}
String setN3="set"+att3name.substring(0, 1).toUpperCase()+att3name.substring(1);
Method mmm=clstu.getMethod(setN3, String.class);
// System.out.println(stunode.getNodeName()+":"+setN3);
mmm.invoke(stu, att3value);
System.out.print(" "+att3value);
}
// System.out.println("学生属性:+++++++++++++");
smap.put(sno, stu);
System.out.println(sno+stu.getName());
}
}
//将smap的信息给mc
mc.setMap(smap);
map.put(code, mc);
System.out.println(code+map.get("jk01").getMap().get("110").getName());
System.out.println(code+map.get("jk01").getMap().get("120").getName());
}
// System.out.println("班级属性:@@@@@@@@@@@@@@@@@@@@@@");
// coll.setMap(map);
// System.out.println("学校名:"+coll.getName());
// System.out.println("学校地址:"+coll.getAddr());
// MyClass my=coll.getMap().get("sp01");
// System.out.println("班级名:"+my.getName());
// System.out.println("班级编号:"+my.getNum());
// Student Mystu =mc.getMap().get("110");
// System.out.println(Mystu.getName()+"-"+Mystu.getAge()+"-"+Mystu.getSno());
// System.out.println(Mystu.getName()+"-"+Mystu.getAge()+"-"+Mystu.getSno());
// System.out.println(code+map.get("jk01").getMap().get("120").getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
DOM解析二
TestInfo
package com.ibm.xmldemo;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestSax {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(new File("d:/web/xml/one.xml"));
Element root=doc.getRootElement();
System.out.println(root.getName());
//采用迭代遍历出根节点的子节点
Iterator<Element> it =root.elementIterator();
while (it.hasNext()) {
Element el = it.next();
System.out.println(el.getName());
Iterator<Attribute> its=el.attributeIterator();
while (its.hasNext()) {
Attribute att = its.next();
System.out.print(att.getName()+"="+att.getValue()+"\t");
}
System.out.println();
//继续循环迭代class标签下的子节点
Iterator<Element> it2=el.elementIterator();
while (it2.hasNext()) {
Element el2 = it2.next();
// System.out.println(el2.getName());
Iterator<Attribute> its2=el2.attributeIterator();
while (its2.hasNext()) {
Attribute atts = its2.next();
System.out.print(atts.getName()+"="+atts.getValue()+"\t");
}
//换行
System.out.println();
}
//班级间的换行
System.out.println();
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
- java 从零开始,学习笔记之基础入门<DOM解析>(三十二)
- java 从零开始,学习笔记之基础入门(开始)
- java 从零开始,学习笔记之基础入门(一)
- java 从零开始,学习笔记之基础入门<数组>(七)
- java 从零开始,学习笔记之基础入门<Switch>(八)
- java 从零开始,学习笔记之基础入门<Static>(十二)
- java 从零开始,学习笔记之基础入门<异常>(十五)
- java 从零开始,学习笔记之基础入门<集合>(十六)
- java 从零开始,学习笔记之基础入门<javascript>(三十)
- java 从零开始,学习笔记之基础入门<Oracle_基础>(三十三)
- java 从零开始,学习笔记之基础入门<Oracle_查询>(三十四)
- java 从零开始,学习笔记之基础入门<Struts2_Spring_整合>(四十一)
- java 从零开始,学习笔记之基础入门<Jquery>(四十三)
- java 从零开始,学习笔记之基础入门<统计图>(四十四)
- java 从零开始,学习笔记之基础入门<数组列表(ArrayList)>(九)
- java 从零开始,学习笔记之基础入门<对象_属性>(二)
- java 从零开始,学习笔记之基础入门<类_方法_构造器>(三)
- java 从零开始,学习笔记之基础入门<信息的隐藏>(四)
- Struts2 action中获取session,request对象的方法
- Android 以Http协议 使用get和post方式请求站点
- MySQL数据库备份命令
- logback 配置详解(一)<configuration> and <logger>
- RTP/RTCP(二)-H.264 视频 RTP 负载格式
- java 从零开始,学习笔记之基础入门<DOM解析>(三十二)
- oracle 大数据量下的分页解决方法【截取ID法】
- web-service各框架额外限制积累
- block 内部结构分解
- HttpClient---NameValuePair参数问题
- windows下清空dns因hosts修改带来的解析缓存 ipconfig /flushdns
- iOS 定义类将请求的数据放到类中方便全局调用
- 子窗口向父窗口传值
- 在线邮件地址过滤