//dom4j
exam.xml | output.xml |
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<exam>
<student idcard="111" examid="222">
<name>張三</name>
<location>沈陽</location>
<grade>89</grade>
</student>
<student idcard="333" examid="444">
<name>李四</name>
<location>大連</location>
<grade>97</grade>
</student>
</exam>
|
<?xml version="1.0" encoding="utf-8"?>
<exam>
<student idcard="111" examid="222">
<name>張三</name>
<location>沈陽</location>
<grade>89</grade>
<sex>男</sex>
</student>
<student idcard="333" examid="444">
<name>李四</name>
<location>大連</location>
</student>
<student idcard="5555" examid="999"/>
</exam>
|
Dom4j.java | |
/* 針對exam.xml文件使用dom4j完成入下操作:
1,得到某個具體的節點內容
2、修改某個元素節點的主體內容
3、向指定元素節點中增加子元素節點
4、向指定元素節點上增加同級元素節點
5、刪除指定元素節點
6、遍歷所有元素節點
7、獲取XML文件某元素屬性
*/
|
//開頭導入包省略
public class Dom4j {
public static void main(String[] args) throws Exception{
SAXReader reader=new SAXReader();
Document document=reader.read("exam.xml");
//獲取document對象
//得到第一個人的姓名
Element rootElement = document.getRootElement();
Element firstStudent=rootElement.element("student");
Element firstName=firstStudent.element("name");
String firstNameText = firstName.getText();
System.out .println(firstNameText);
|
//修改第二個人的grade為100
List allStudentList = rootElement.elements();
Element secondStudent=(Element)allStudentList.get(1);
Element secGrade=secondStudent.element("grade");
secGrade.setText("100");
//第一個學生增加性別 - 男
Element firstStuSex= firstStudent.addElement("sex");
firstStuSex.setText("男");
//根節點增加同級元素 一個新的student
Element createnewElement = DocumentHelper.createElement("student");
createnewElement.setAttributeValue("idcard", "5555");
createnewElement.setAttributeValue("examid", "999");
rootElement.add(createnewElement);
//rootElement.addElement("student"); //第二種方式
//刪除第二個學生的grade
secGrade.detach();
//remove()也行
|
//遍歷所有元素
for(int i=0;i<allStudentList.size();++i){
Element tmpStu=(Element)allStudentList.get(i);
for(int j=0;j<tmpStu.elements().size();j++){
Element tmpChild=(Element)tmpStu.elements().get(j);
String str=tmpChild.getName();
String str1=tmpChild.getText();
System.out .println(str+" "+str1);
}
}
//獲取XML屬性
String xmlEncoding=document.getXMLEncoding();
String UniquePath=document.getUniquePath();
System.out .println(xmlEncoding+" "+UniquePath);
//在當前目錄
//標准的保存語句。
//dom4j寫回文檔會自動寫換行方便觀看
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML編碼
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileOutputStream ("output.xml"),format);
writer.write(document);
writer.close();
}
}
|

//XPath
exam.xml | output2.xml |
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<exam>
<student idcard="111" examid="222">
<name>張三</name>
<location>沈陽</location>
<grade>89</grade>
</student>
<student idcard="333" examid="444">
<name>李四</name>
<location>大連</location>
<grade>97</grade>
</student>
</exam>
|
<?xml version="1.0" encoding="utf-8"?>
<exam>
<student idcard="111" examid="222">
<name>張三</name>
<location>沈陽</location>
<grade>100</grade>
</student>
<student idcard="333" examid="444">
<name>李四</name>
<location>大連</location>
</student>
</exam>
|
public class XPath {
public static void main(String[] args) throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read("exam.xml");
//得到第一個人的姓名
Node firstStuNameNode=document.selectSingleNode("/exam/student/name");
String firstStuName=firstStuNameNode.getText();
System.out.println(firstStuName);
//修改第二個人的grade為100
Node firstStuGradeNode = document.selectSingleNode("/exam/student/grade");
firstStuGradeNode.setText("100");
//刪除第二個學生的grade
Node secStuNode=document.selectSingleNode("/exam/student[2]/grade");
secStuNode.detach();
//遍歷所有元素
List allNodes=document.selectNodes("/exam/*");
for(int i=0;i<allNodes.size();++i){
Element subNodes=(Element)allNodes.get(i);
for(int j=0;j<subNodes.elements().size();++j){
String subName=((Element)subNodes.elements().get(j)).getName();
String subText=((Element)subNodes.elements().get(j)).getText();
System.out .println(subName+" "+subText);
}
}
|
//標准的保存語句。
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileOutputStream ("output2.xml"),format);
writer.write(document);
writer.close();
}
}
![]()
//目前我還只會用XPath來定位,就比DOM4j簡單的多,增加還不會
|