XML常见的解析方式
- DOM(文档对象模型)
取出.xml文件中的信息
public class StudentManager {
static Document document;
static String Path = "src\\com\\etc\\student.xml";
static {
// 1、创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
// 2、根据解析器工厂获得解析器对象
try {
db = dbf.newDocumentBuilder();
// 3、加载XML文档,形成Document对象
document = db.parse(Path);
} catch (Exception e) {
e.printStackTrace();
}
}
public void show() {
NodeList list = document.getElementsByTagName("student");// 取出所有的Student子节点
System.out.println("一共有:" + list.getLength() + "位学生");
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
//取节点的属性值必须要转换成ELement对象
Element e = (Element) node;
System.out.println("学号:" + e.getAttribute("id"));
// 循环取Student节点下的子节点
for (Node n = node.getFirstChild(); n != null; n = n.getNextSibling()) {
if (n.getNodeType() == node.ELEMENT_NODE)// 判断是不是元素节点
{
if (!n.getNodeName().equals("scores")) {
if (n.getNodeName().equals("name")) {
System.out.println("姓名:"
+ n.getFirstChild().getNodeValue());
} else if (n.getNodeName().equals("sex")) {
System.out.println("性别:"
+ n.getFirstChild().getNodeValue());
} else if (n.getNodeName().equals("age")) {
System.out.println("年龄:"
+ n.getFirstChild().getNodeValue());
} else if (n.getNodeName().equals("phone")) {
System.out.println("电话:"
+ n.getFirstChild().getNodeValue());
}
} else {// 取出成绩
System.out.println("成绩如下:");
for (Node scNode = n.getFirstChild(); scNode != null; scNode = scNode
.getNextSibling()) {
if (scNode.getNodeType() == scNode.ELEMENT_NODE)
System.out.println(scNode.getFirstChild()
.getNodeValue());
}
System.out.println("=============");
}
}
}
}
}
往.xml文件中添加信息
public void add() {
String name = "王锤锤";
String id = "04";
String sex = "女";
String age = "12";
String phone = "12323423423";
// 创建Student节点
Element studentElement = document.createElement("student");
Attr idAttr = document.createAttribute("id");// 创建ID属性
idAttr.setValue(id);// 给ID属性赋值ֵ
studentElement.setAttributeNode(idAttr);// 把ID属性加入到Student节点中
Element e1 = document.createElement("name");// 创建name节点
e1.setTextContent(name);// 给节点设置数据
studentElement.appendChild(e1);// 把ID属性加入到Student节点中
e1 = document.createElement("sex");// 创建sex节点
e1.setTextContent(sex);// 给节点设置数据
studentElement.appendChild(e1);//把sex属性加入到Student节点中
e1 = document.createElement("age");// 创建age节点
e1.setTextContent(age);// 给节点设置数据
studentElement.appendChild(e1);// 把age属性加入到Student节点中
e1 = document.createElement("phone");// 创建phone节点
e1.setTextContent(phone);// 给节点设置数据
studentElement.appendChild(e1);//把phone属性加入到Student节点中
// 取跟节点
Element root = document.getDocumentElement();
root.appendChild(studentElement);// 把Student节点加入根节点的子节点中
/*save();*/
//更新XML文档
TransformerFactory tff = TransformerFactory.newInstance();
try {
Transformer tf = tff.newTransformer();
DOMSource domSource = new DOMSource(document);
StreamResult ss = new StreamResult(Path);
tf.transform(domSource, ss);
} catch (Exception e) {
e.printStackTrace();
}
}
删除.XML文件节点信息
public void delete() {
String id = "04";
// 取所有Student节点集合
NodeList list = document.getElementsByTagName("student");
// 循环每一个Student节点
for (int i = 0; i < list.getLength(); i++) {
Node n = list.item(i);
Element e = (Element) n;// 取节点的ID属性值ֵ
String idString = e.getAttribute("id");
if (idString.equals(id)) {
// 删除节点,方法是:取当前节点的父节点,根据父节点来一处子节点
n.getParentNode().removeChild(n);
break;
}
}
save();
}
更新.XML文件信息
public void update() {
String id = "04";
String name = "王大锤";
String sex = "男";
// 取所有Student节点集合
NodeList list = document.getElementsByTagName("student");
// 循环每一个Student节点
for (int i = 0; i < list.getLength(); i++) {
Node n = list.item(i);
Element e = (Element) n;// 取节点的ID属性值ֵ
String idString = e.getAttribute("id");
if (idString.equals(id)) {//判断是否要进行更新的节点
// 改节点中某个子节点的内容
for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling()) {
if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("name")) {
node.getFirstChild().setTextContent(name);
} else if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("sex")) {
node.getFirstChild().setTextContent(sex);
}
}
break;
}
}
save();
}
public void save() {
//更新XML文档
TransformerFactory tff = TransformerFactory.newInstance();
try {
Transformer tf = tff.newTransformer();
DOMSource domSource = new DOMSource(document);
StreamResult ss = new StreamResult(Path);
tf.transform(domSource, ss);
} catch (Exception e) {
e.printStackTrace();
}
}
DOM4J
DOM4J:非常优秀的Java XML API性能优异。功能强大开放源代码
public class Dom4j1 {
static String Path = "src\\com\\etc\\student.xml";
static Document document = null;
static {
SAXReader saxReader = new SAXReader();
try {
document = saxReader.read(new File(Path));
} catch (Exception e) {
e.printStackTrace();
}
}
public void show(){
// 取根节点
Element root = document.getRootElement();
// 取节点下的所有子节点:Student
List<Element> list = root.elements();
for (Element element : list) {
System.out.println("学号:" + element.attribute("id").getValue());
// 取student节点中的所以子节点
List<Element> elements = element.elements();
for (Element element2 : elements) {
if (!element2.getName().equals("scores")) {
System.out.println(element2.getName() + " : "
+ element2.getText());
} else {
System.out.println("成绩为:");
List<Element> scores = element2.elements();
for (Element e : scores) {
System.out.println(e.getText());
}
System.out.println();
}
}
System.out.println("=======");
}
}
public void add(){
String name = "孙晓晓";
String id= "05";
String sex="女";
String age = "13";
String phone = "23423454323";
//根节点
Element root = document.getRootElement();
//为根节点添加子节点,并且获得刚刚添加的节点对象
Element student = root.addElement("student");
student.addAttribute("id", id);//为Student节点添加属性
student.addElement("name").setText(name);
student.addElement("sex").setText(sex);
student.addElement("age").setText(age);
student.addElement("phone").setText(phone);
save();
}
public void delete(){
String id= "05";
Element root = document.getRootElement();
//取节点下的所有子节点:Student
List<Element> list = root.elements();
for(int i = 0; i<list.size();i++){
Element element2 = (Element)list.get(i);
String idString = element2.attributeValue("id");
if(idString.equals(id)){
root.remove(element2);
}
}
save();
}
public void update(){
String id = "05";
String name = "孙大大";
String sex = "男";
Element root = document.getRootElement();
//取节点下的所有子节点:Student
List<Element> list = root.elements();
for(Element e:list){
if(e.attribute("id").getValue().equals(id)){
e.element("name").setText(name);
e.element("sex").setText(sex);
}
}
}
public void save(){
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = null;
try {
writer = new XMLWriter(new FileWriter(Path),format);
writer.write(document);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}