dom4j的应用

自学了一下dom4j的应用,下面是主要的代码片段,附件中有eclipse的工程源码,导入eclipse运行即可,注意:
必须导入两个包,一个是 dom4j-1.6.1.jar(我用的是这个),另外一个是 jaxen-1.1.1.jar(使用xpath解析时必
需要这个包)


//表示查找boardroom属性id=id的元素
Element e = Dom4jXmlUtil.xPathOneElement(doc, "//boardrooms/boardroom[@id='" + id+ "']");
//表示查询boardroom下元素name值为name的元素
Element e = Dom4jXmlUtil.xPathOneElement(doc, "//boardrooms/boardroom[name='" + name + "']");



ParseXML.java

package my.xml;

import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;

public class ParseXML {
	
/**
 * 把Document解析成String
 * @param doc
 * @throws DocumentException
 */
	public void printXmlToString(Document doc) throws DocumentException {
		String text = doc.asXML();
		System.out.println(text);
	}
	
/**
 *  采用迭代器解析xml
 * @param doc
 * @throws DocumentException
 */
	@SuppressWarnings("unchecked")
	public void printXmlByIt(Document doc) throws DocumentException {
		Element e = doc.getRootElement();
		for (Iterator it = e.elementIterator("webSite"); it.hasNext();) {
			Element element = (Element) it.next();
			String url = element.attributeValue("href");
			System.out.println(url);
		}
		return;
	}
	
	/**
	 * 通过Element来解析xml 
	 * @param doc
	 * @throws DocumentException
	 */
	@SuppressWarnings("unchecked")
	public void printXmlByElement(Document doc) throws DocumentException {
		Element element = doc.getRootElement();
		List<Element> lst = element.elements("webSite");
		for(Element e : lst){
			List<Element> tLst = e.elements("title");
			for(Element e2 : tLst){
				String eString = e2.getText();//获取title节点的内容
				System.out.println(eString);
			}
		}
		return;
	}

	
/**
 *  通过xpath来解析xml
 *  注意:必须导入jaxen-1.1.1.jar,否则有异常
 * @param doc
 */
	@SuppressWarnings("unchecked")
	public void printXmlByXpath(Document doc) {
		try {
			Node root = doc.selectSingleNode("//webSites");// 从Document开始时需要加两个/
			/**
			 * 是读取刚才加载的xml文档内的webSites节点下的所有内容,对于本例也是整个xml文档。
			 * 如果要加载webSites下的某个节点,如:Node root = doc.selectSingleNode("//webSites/webSite");
			 */
			List list = root.selectNodes("webSite[@href='www.baidu.com']");//获取webSites下webSite节点
			/**
			 * 它的意思就是读取webSites节点下的webSite节点,且webSite的节点的href属性为www.baidu.com
			 * 为什么使用list来接收呢,如果有两个webSite节点,且它们的href属性都为www.baidu.com,此时就封闭到list里了。
			 * 如果要获取webSites下所有的webSite节点,可以这么写List list = root.selectNodes("webSite");
			 */
			for (Object o : list) {
				Element e = (Element) o;
				String open = e.attributeValue("open");//获取节点webSite上的open属性值
				System.out.println("open = " + open);
			}
			List listTitle = root.selectNodes("webSite[@href='www.163.com']/title[@id='3_1']");//获取webSites下webSite下title节点
			for (Object o : listTitle) {
				Element e = (Element) o;
				String id = e.attributeValue("id");
				System.out.println("id = " + id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
 

你可能感兴趣的:(xpath dom4j)