JAVA深入

来源:互联网 发布:网狐荣耀源码 编辑:程序博客网 时间:2024/06/05 05:08

JAVA深入第三章

本章学习要点:

  • XML解析

XML解析

DOM解析

获得文档对象
public Document getDocument(String xml) {
// 1.创建解析器工厂对象 (抽象类)
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

// 2.由解析器工厂对象创建解析器对象 (抽象类)
DocumentBuilder db;
try {
db = factory.newDocumentBuilder();
// 3.由解析器对象对指定XML文件进行解析,构建相应DOM树,创建Document对象
Document document = db.parse(xml);
return document;
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return null;

}

* 解析文档*
public void parseXml(String xml) {
// 1)获得文档对象
Document document = getDocument(xml);
// 获得student的节点
NodeList list1 = document.getElementsByTagName(“student”);
System.out.println(“序号\t姓名\t性别\t年龄”);
for (int i = 0; i < list1.getLength(); i++) {

// 指包含了一个或者多个节点(Node)的列表item(int index)
Element element = (Element) list1.item(i)
// 获得属性值
String id = element.getAttribute(“id”);
// System.out.println(id);
// 通过标签名称 注意:getFirstChild()
String name = document.getElementsByTagName(“name”).item(i).getFirstChild().getNodeValue();
String sex = document.getElementsByTagName(“sex”).item(i).getFirstChild().getNodeValue();
String age = document.getElementsByTagName(“age”).item(i).getFirstChild().getNodeValue();
// 封装对象
Student student = new Student(id, name, sex, Integer.parseInt(age));
System.out.println(student);

    }}

添加
public void add(String xml, Student student) {
// 1)获得文档对象
Document document = getDocument(xml);
// 2)创建节点 student,name,sex,age
Element studentEle = document.createElement(“student”);
Element nameEle = document.createElement(“name”);
Element sexEle = document.createElement(“sex”);
Element ageEle = document.createElement(“age”);
// 添加节点值
nameEle.setTextContent(student.getName());
sexEle.setTextContent(student.getSex());
ageEle.setTextContent(student.getAge() + “”);转换成字符串
// 属性节点
Attr idAttr = document.createAttribute(“id”);
idAttr.setValue(student.getId());
// 将节点name,sex,age 添加到student节点下
studentEle.appendChild(nameEle);
studentEle.appendChild(sexEle);
studentEle.appendChild(ageEle);
// 属性节点id添加到student节点下
studentEle.setAttributeNode(idAttr);
// 将student节点添加到根节点下
document.getDocumentElement().appendChild(studentEle);
// 没有写入到xml文件中///
saveXml(xml, document);
// System.out.println(“add success!”);

}

删除方法
public void del(String xml, Student student) {
// 1)获得document对象
Document document = getDocument(xml);
// 2)获得student的节点
NodeList lists = document.getElementsByTagName(“student”);
for (int i = 0; i < lists.getLength(); i++) {
// 获得元素
Element element = (Element) lists.item(i);
// 获得id
String id = element.getAttribute(“id”);
// 判断
if (student.getId().equals(id)) {
// 删除
document.getDocumentElement().removeChild(element);
break; // 停止循环
}
// System.out.println(id);
}
// 没有写入到xml文件中///
saveXml(xml, document);
// System.out.println(“del success!”);

}

更新数据
public void update(String xml, Student student) {
// 1)获得document对象
Document document = getDocument(xml);
// 2)获得student的节点
NodeList lists = document.getElementsByTagName(“student”);
for (int i = 0; i < lists.getLength(); i++) {
// 获得元素
Element element = (Element) lists.item(i);
// 获得id
String id = element.getAttribute(“id”);
// 判断
if (student.getId().equals(id)) {
//修改
element.getElementsByTagName(“name”).item(0).setTextContent(student.getName());
element.getElementsByTagName(“age”).item(0).setTextContent(student.getAge()+”“);
element.getElementsByTagName(“sex”).item(0).setTextContent(student.getSex());
break; // 停止循环
}
// System.out.println(id);
}
// 没有写入到xml文件中///
saveXml(xml, document);
// System.out.println(“update success!”);

}

写入方法
public void saveXml(String xml, Document document) {
// 解析工厂对象 (抽象类)
TransformerFactory factory = TransformerFactory.newInstance();
try {
// 解析对象
Transformer transformer = factory.newTransformer();
// 解析方法(source文档对象,输出结果xml文件)
transformer.transform(new DOMSource(document), new StreamResult(new FileOutputStream(xml)));

} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

DOM4J解析

文档对象
public Document getDocument(String xml) {
// 读取对象
SAXReader reader = new SAXReader();
try {
// 获得文档对象
Document document = reader.read(new File(“student.xml”));
return document;
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

解析文档
public void parseXml(String xml) {
// 1) 文档对象
Document document = getDocument(xml);
// 2)获得根节点
Element root = document.getRootElement();
// 3)根节点的孩子
List lists = root.elements();
// System.out.println(lists.size());
for (Element element : lists) {
// System.out.println(element.getName())
// 获得属性
String id = element.attribute(“id”).getName();
String value = element.attribute(“id”).getText();
// System.out.println(id+”\t”+value);
// 没有此标签会发生异常:java.lang.NullPointerException
// String name = element.element(“name”).getText();
// System.out.println(name);
String name = “”;
String age = “”;
String sex = “”;
// 获得student的孩子
List student = element.elements();
for (Iterator it = student.iterator(); it.hasNext();) {
Element ele = it.next();
// 获得标签
switch (ele.getName()) {
case “name”:
name = ele.getText(); // 获得值
break;
case “sex”:
sex = ele.getText(); // 获得值
break;
case “age”:
age = ele.getText(); // 获得值
break;
default:
break;
}
} // end for2
System.out.println(value + “\t” + name + “\t” + sex + “\t” + age);
} // end for1

}

添加方法
public void add(String xml, Student stu) {
// 1) 文档对象
Document document = getDocument(xml);
// 2)获得根节点
Element root = document.getRootElement();
// 3)创建节点 student,name,sex,age
Element student = root.addElement(“student”);
student.addElement(“name”).setText(stu.getName());
student.addElement(“sex”).setText(stu.getSex());
student.addElement(“age”).setText(stu.getAge() + “”);

// 4)属性id
student.addAttribute(“id”, stu.getId());
// 写入xml文件
saveXml(xml, document);
}
删除方法
public void del(String xml,String id){
// 1) 文档对象
Document document = getDocument(xml);
// 2)获得根节点
Element root = document.getRootElement();
List list= root.elements();
for (Element element : list) {
//判断是否是这个学号
if(element.attributeValue(“id”).equals(id)){
root.remove(element); //删除
break; //停止循环
}
}
// 写入xml文件
saveXml(xml, document);
}
修改方法
public void update(String xml,Student stu){
// 1) 文档对象
Document document = getDocument(xml);
// 2)获得根节点
Element root = document.getRootElement();
List list= root.elements();
for (Element element : list) {
//判断是否是这个学号
if(element.attributeValue(“id”).equals(stu.getId() )){
//修改
element.element(“name”).setText(stu.getName());
element.element(“sex”).setText(stu.getSex());
element.element(“age”).setText(stu.getAge()+”“);
break; //停止循环
}
}
写入方法
private void saveXml(String xml, Document document) {
// 输出格式
OutputFormat of = OutputFormat.createPrettyPrint();
// 设置编码
of.setEncoding(“utf-8”);

//写入对象
try {
XMLWriter writer = new XMLWriter(new FileOutputStream(xml), of);

//写入
writer.write(document);
//关闭
writer.close();

} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

原创粉丝点击