一、XML和String互轉:
使用dom4j程式變得很簡單
//字符串轉XML
String xmlStr = \"......\";
Document document = DocumentHelper.parseText(xmlStr); // XML轉字符串
Document document = ...; String text = document.asXML(); //這里的XML DOCUMENT為org.dom4j.Document
二、讀取XML文檔節點:
package vastsum; import java.io.File; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; /** * 讀取下xml文檔,獲得document對象。 */
class exmple { public static void main(String[] args) throws DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(new File("./src/contact.xml")); /** * 節點對象的操作方法 */
//獲取文檔根節點
Element root = document.getRootElement(); //輸出根標簽的名字
System.out.println(root.getName()); //獲取根節點下面的所有子節點(不包過子節點的子節點)
List<Element> list = root.elements() ; //遍歷List的方法
for (Element e:list){ System.out.println(e.getName()); } //獲得指定節點下面的子節點
Element contactElem = root.element("contact");//首先要知道自己要操作的節點。
List<Element> contactList = contactElem.elements(); for (Element e:contactList){ System.out.println(e.getName()); } //調用下面獲取子節點的遞歸函數。
getChildNodes(root); //獲得當前標簽下指定名稱的第一個子標簽
Element conElem = root.element("contact"); System.out.println(conElem.getName()); //獲得更深層次的標簽(一層一層的獲取)
Element nameElem = root.element("contact").element("name"); System.out.println(nameElem.getName()); } //遞歸查詢節點函數,輸出節點名稱
private static void getChildNodes(Element elem){ System.out.println(elem.getName()); Iterator<Node> it = elem.nodeIterator(); while (it.hasNext()){ Node node = it.next(); if (node instanceof Element){ Element e1 = (Element)node; getChildNodes(e1); } } } }
三、對XML節點屬性進行增刪改查
package vastsum; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; /** * 使用dom4j操作xml * 對xml屬性操作 * 操作xml文件為contact.xml * */
public class attrDemo{ @Test public void exmple() throws Exception{ //讀取XML文件,獲得document對象
SAXReader reader = new SAXReader(); Document document = reader.read(new File("./src/contact.xml")); //獲得某個節點的屬性對象
Element rootElem = document.getRootElement(); //獲取根節點屬性對象
Attribute rootAttr = rootElem.attribute("id"); //獲取指定節點屬性對象
Element contactElem = rootElem.element("contact"); Attribute contactAttr = contactElem.attribute("id"); //獲取指定對象的屬性名
System.out.println(rootAttr.getName()); System.out.println(contactAttr.getName()); //獲取指定對象的屬性值
System.out.println(contactAttr.getValue()); System.out.println(rootAttr.getValue()); //遍歷某個節點的所有屬性
for (Iterator it = contactElem.attributeIterator();it.hasNext();){ Attribute conAttr= (Attribute)it.next(); String conTxt = conAttr.getValue(); String conAttrName = conAttr.getName(); System.out.println(conAttrName+" = "+conTxt); } //設置某節點的屬性和值
contactElem.addAttribute("name", "zhangsan"); //設置(更改)某屬性的值
Attribute nameAttr = contactElem.attribute("name"); nameAttr.setValue("lisi"); //刪除某節點的指定屬性
contactElem.remove(nameAttr); //將某節點的屬性和值寫入xml文檔中
XMLWriter writer = new XMLWriter(new FileWriter("./src/contact.xml")); writer.write(document); writer.close(); //如果文檔中有中文需要設置字符編碼,用如下語句:
OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); XMLWriter writer = new XMLWriter(new FileWriter("./src/contact.xml"),format); } }
下面介紹下dom4j:
dom4j是Java的XML API,用來讀寫XML文件的。目前有很多場景中使用dom4j來讀寫xml的。
要使用dom4j開發,需要下載導入dom4j相應的jar文件。官網下載:http://www.dom4j.org/dom4j-1.6.1/
下載解壓之后如圖所示:
我們只需要把dom4j-1.6.1.jar文件構建到我們開發項目中就可以了。
在項目中創建一個lib文件,把dom4j-1.6.1.jar文件拷貝到lib中,然后右鍵dom4j-1.6.1jar文件。如圖所示:
點擊Add to Bulid Path即可構建到項目中去了。導入成功如圖所示: