dom4j+XPath


//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簡單的多,增加還不會

















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM