一、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即可构建到项目中去了。导入成功如图所示: