/** * 該類主要實現xml的基本操做 * * @param FilePath 寫入xml文件的路徑 * 2019年8月27日 15:37:08 */ public static void testXml(String FilePath) throws IOException { Document domcment = DocumentHelper.createDocument(); //經過這句定義一個xml文檔對象 Element root = domcment.addElement("node"); //經過這局定義一個xml元素,這裏添加的是根節點,一個文檔只能存在一個根節點,不然會報錯 /* * Element有幾個重要的方法: * 一、addComment:添加註釋 * 二、addAttribute:添加屬性 * 三、addElement:添加子元素 * */ root.addComment("這是一我的員信息的xml"); //root.addAttribute("name","zhangsan"); Element first = root.addElement("skills");//根節點下添加節點 first.addAttribute("name", "三分歸元氣");//給子節點添加name屬性 Element info = first.addElement("info"); //節點下添加節點 info.setText("風雲雄霸天下");// 節點設置內容數據 Element first1 = root.addElement("skill"); first1.addAttribute("names", "風神腿"); Element info1 = first1.addElement("info"); info1.setText("風神腿,獨步武林"); info1.addComment("擁有該腿,獨步武林"); /* * 最後經過XMLWriter生成物理文件,默認生成的XML文件排版格式比較亂,能夠經過OutputFormat類格式化輸出, * 默認採用createCompactFormat()顯示比較緊湊,最好使用createPrettyPrint()。 * */ OutputFormat format = OutputFormat.createPrettyPrint();//建立格式化類 format.setEncoding("UTF-8"); //設置編碼格式,默認爲UTF-8 FileOutputStream fos = new FileOutputStream(FilePath);//建立輸出流,此處要使用Writer,須要指定輸入編碼格式,使用OutputStream則不用 XMLWriter writer = new XMLWriter(fos, format); //建立xml輸出流 writer.write(domcment); writer.close(); System.out.println("輸出流已經關閉"); } /** * 使用dom4j解析xml文件SAXReader *****Element元素API***** * getQName() 元素的QName對象 * getNamespace() 元素所屬的Namespace對象 * getNamespacePrefix() 元素所屬的Namespace對象的prefix * getNamespaceURI() 元素所屬的Namespace對象的URI * getName() 元素的local name * getQualifiedName() 元素的qualified name * getText() 元素所含有的text內容,若是內容爲空則返回一個空字符串而不是null * getTextTrim() 元素所含有的text內容,其中連續的空格被轉化爲單個空格,該方法不會返回null * attributeIterator() 元素屬性的iterator,其中每一個元素都是Attribute對象 * attributeValue() 元素的某個指定屬性所含的值 * elementIterator() 元素的子元素的iterator,其中每一個元素都是Element對象 * element() 元素的某個指定(qualified name或者local name)的子元素 * elementText() 元素的某個指定(qualified name或者local name)的子元素中的text信息 * getParent 元素的父元素 * getPath() 元素的XPath表達式,其中父元素的qualified name和子元素的qualified name之間使用"/"分隔 * isTextOnly() 是否該元素只含有text或是空元素 * isRootElement() 是否該元素是XML樹的根節點 * * *****Attribute屬性API***** * getQName() 屬性的QName對象 * getNamespace() 屬性所屬的Namespace對象 * getNamespacePrefix() 屬性所屬的Namespace對象的prefix * getNamespaceURI() 屬性所屬的Namespace對象的URI * getName() 屬性的local name * getQualifiedName() 屬性的qualified name * getValue() 屬性的值 * @param xmlFile 要解析xml的文件 * 2019-08-27 15:42:45 */ public static void parseXml(String xmlFile) throws DocumentException { SAXReader saxReader = new SAXReader(); //使用SAXReader解析xml Document document = saxReader.read(new File(xmlFile));//獲取document對象 Element root = document.getRootElement(); //訪問根節點 //訪問全部葉子節點 List skills = root.elements(); for (Iterator<?> it = skills.iterator(); it.hasNext(); ) { Element e = (Element) it.next(); System.out.println(e); } //訪問指定名稱的節點,如訪問名稱爲「skill」的所有節點 List skill = root.elements("skill"); for (Iterator<?> it = skill.iterator(); it.hasNext(); ) { Element e = (Element) it.next(); System.out.println(e); } //訪問指定名稱的第一個節點 Element skillsNode = root.element("skills"); System.out.println(skillsNode); //獲取指定員元素下的屬性 Attribute attribute = skillsNode.attribute("name"); System.out.println(attribute); //按照屬性順序獲取屬性 Attribute attribute1 = skillsNode.attribute(0); System.out.println(attribute1); //用xpath表達式獲取節點和屬性 List list = document.selectNodes("//skills/@name"); for (Iterator it = list.iterator();it.hasNext();){ Attribute attribute2 = (Attribute) it.next(); System.out.println(attribute2); } //刪除某個節點 root.remove(skillsNode); System.out.println("節點刪除成功"); //刪除指定名稱的屬性 root.remove(skillsNode.attribute("name")); System.out.println("刪除指定名稱的屬性"); //修改節點名稱和節點值 skillsNode.setName("new_skill"); skillsNode.setText("你好啊,賽利亞"); } public static void main(String[] args) throws IOException, DocumentException { //testXml("d:/skills.xml"); parseXml("d:/skills.xml"); }