dom4j学习---初级入门

      这几天因为工作需要,在网上找了一些教程自己学了一下通过dom4j操作xml文档的方法。
现在把自己的学习心得写出来给需要的朋友。
首先,大概介绍一下dom4j这个开源库。
      Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP------摘自百度百科。
      不说废话了,直接上代码吧,代码里注释很清楚了。
      首先在官方网站下载dom4j-1.6.1.zip,解压以后里面有源码、帮助文档、以及需要用到的jar包,
然后将dom4j-full.jar包导入java工程即可。
先贴上test.xml文件结构:

<JAVAAPI>
	<API>
		<SN name="获取组织证件列表">asdf.org.cert.list.get</SN>
		<CT>{"orgId":"asdf"}</CT>
	</API>
	<API>
		<SN name="获取指定的组织证件照片">asdf.org.cert.photo.get</SN>
		<CT>{"eid":"JMFFGU"}</CT>
	</API>
	<API>
		<SN name="获取组织证件列表2">asdf.org.cert.list.get</SN>
		<CT>{"orgId":"asdf"}</CT>
	</API>
	<API>
		<SN name="获取组织证件列表3">asdf.org.cert.list.get</SN>
		<CT>{"orgId":"asdf.23423@sdfasdfSDFAS"}</CT>
	</API>
	<API>
		<SN name="获取组织证件列表4">asdf.org.cert.list.get</SN>
		<CT>{"orgId":"asdf@FSADFSADFSDAF"}</CT>
	</API>
	<API>
		<SN name="获取组织证件列表5">asdf.org.cert.list.get</SN>
		<CT>{"orgId":"asdfasdfasdf@sfsdfa"}</CT>
	</API>
</JAVAAPI>
ReadXml.java
public static void read() {
		//获得用于读取xml文档SAXReader对象实例
		SAXReader reader = new SAXReader();
		try {
			//读取文档对象
			Document document = reader.read(new File("src/test.xml"));
			//获得文档根节点
			Element root = document.getRootElement();
			//遍历根元素底下的所有子节点
			for (Iterator i = root.elementIterator(); i.hasNext(); ) {
				Element node = (Element) i.next();
				//遍历二级子节点的所有子节点
				for (Iterator ii = node.elementIterator(); ii.hasNext(); ) {
					Element childNode = (Element) ii.next();
					if (childNode.getName().equals("SN")) {
						//获取当前节点的name属性
						Attribute attr = childNode.attribute("name");
						//输出当前节点的属性值
						System.out.print(attr.getStringValue() + " <-- ");
						//输出当前节点的值
						System.out.println(childNode.getStringValue());
					}
					else {
						//输出当前节点的值
						System.out.println(childNode.getStringValue());
					}
				}
			}
		} catch (MalformedURLException | DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
String与xml互相转化,并将Document对象写入文件
public static void main(String[] args) {
		// TODO Auto-generated method stub
		//程序测试用的变量
		boolean isXmlToStr = true;
		boolean isStrToXml = true;
		//string转成xml
		if (isStrToXml) {
			String str = "<API>" +
					"<SN name=\"获取组织证件列表\">asdf.org.cert.list.get</SN><CT>{\"orgId\":\"asdf\"}</CT>" +
					"<SN name=\"获取组织证件列表\">asdf.org.cert.list.get</SN><CT>{\"orgId\":\"asdf\"}</CT>" +
					"</API>";
			try {
				//使用DocumentHelper的parseText函数将String对象转换成Document对象
				Document doc = DocumentHelper.parseText(str);
				//获得根节点
				Element root = doc.getRootElement();
				//遍历
				for (Iterator i = root.elementIterator(); i.hasNext(); ) {
					Element node = (Element) i.next();
					//获得当前节点的name属性
					Attribute attr = node.attribute("name");
					if (node.getName().equals("SN")) {
						System.out.print(attr.getStringValue() + " <-- ");
						System.out.println(node.getStringValue());
					}
					else {
						System.out.println(node.getStringValue());
					}
				}
				System.out.println();
			} catch (DocumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//xml转成string
		if (isXmlToStr) {
			//创建一个空的文档对象
			Document doc = DocumentHelper.createDocument();
			//为文档增加一个根节点
			Element root = doc.addElement("root");
		    //为根节点增加子节点
			Element author1 = root
		    		.addElement("author")
		            .addAttribute("name", "James")
		            .addAttribute("location", "UK")
		            .addText("James Strachan");
			//为根节点增加子节点
		    Element author2 = root
		    		.addElement("author")
		    		.addAttribute("name", "约翰")
		    		.addAttribute("location", "EN")
		    		.addText("Beginning in JavaServer Pages");
		    String result = doc.asXML();
			System.out.println(result);
			//写入到磁盘文件中
			try {
				OutputFormat format = new OutputFormat();
				format.setEncoding("utf-8");
				//直接用下面的方法输出会有中文乱码现象
				//<author name="Լ��" location="EN">
				//所以在上面先使用格式化输出,并制定输出编码格式为utf-8
				FileWriter out = new FileWriter(new File("src/haha.xml"));
				XMLWriter writer = new XMLWriter(out, format);
				writer.write(doc);
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
希望能帮助有需要的人哈!

你可能感兴趣的:(java,入门,dom4j,初级)