JDom例子

JdomTest.java

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.w3c.dom.NodeList;

//一个用读取XML的例子
public class JdomTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String fileName = "src/com/huanglq/log4j_config/MyXml.xml";
		try {
			InputStreamReader isr = new InputStreamReader(new FileInputStream(
					fileName));
			// long startDate=new Date().getTime();
			SAXBuilder builder = new SAXBuilder(
					"org.apache.xerces.parsers.SAXParser");
			// 用了其他的解析器:xerces:org.apache.xerces.parsers.SAXParser,其实用默认解析器也可以解析,这里不用会更加快
			// System.out.println(new Date().getTime()-startDate);
			Document doc = builder.build(isr);
			
			isr.close();
			
			Element root = doc.getRootElement();// 根节点
			// System.out.println(root);
			System.out.println("根节点:"+root.getName());// animal

			// 获得根节点下的元素集合
			List<Element> elementlist = root.getChildren();
			for (Element element : elementlist) {
				System.out.println("根节点下的元素:"+element.getName());
				/*
				 * 打印结果: person person dog
				 */
				// 获得子元素名为name的Value
				String name = element.getChildText("name");
				// 获得子元素名为age的Value,去前后空格
				String age = element.getChildTextTrim("age");
				System.out.println("该元素下的子元素为name的值:"+name + "*  该元素下的子元素为age的值:" + age);
				System.out.println("-------------------");
			}

			// 获得根元素下是person的子元素
			List<Element> personList = root.getChildren("person");
			for (Element person : personList) {
				System.out.println(person.getName());// person
				// 获得person下的元素
				List<Element> personElement = person.getChildren();
				for (Element e : personElement) {
					// e.getName()获得元素名,e.getText()获得该元素的值
					System.out.println(e.getName() + "  " + e.getText());
				}
				System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^");
			}
			
			//获得根元素下是dog的子元素
			List<Element> dogList = root.getChildren("dog");
			//输出名为tom的狗的年龄
			for(int i=0;i<dogList.size();i++){
				String dogName=dogList.get(i).getChild("name").getTextTrim();
				//System.out.println(dogName);
				if("tom".equalsIgnoreCase(dogName)){
					System.out.println(dogList.get(i).getChild("name").getTextTrim()+"  "+dogList.get(i).getChild("age").getTextTrim());
					dogList.get(i).getChild("age").setText("11");
					System.out.println(dogList.get(i).getChild("age").getTextTrim());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

----------------------------
JdomUtil.java
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

/**
 * 使用这工具的说明:该类对应的XML文件最好不要存在重复元素,
 * 如果存在重复元素,那么元素的子元素名为name的值一定要不一样
 * 这个类是一个读取XML配置文件的类
 * @author root
 *
 */
public class JdomUtil {

	//要读取的XML文件的路径/文件名
	private static String fileName = "src/com/huanglq/log4j_config/MyXml.xml";
	
	// 根节点
	private static Element root = null;
	
	/**
	 *return 根节点(root)
	 */ 
	private static Element getRootElement() {
		try {
			InputStreamReader isr = new InputStreamReader(new FileInputStream(
					fileName));
			/*
			 * 建立解析器
			 * 用了其他的解析器(要加入其他的包(xml-apis.jar)):(速度200mm)xerces:org.apache.xerces.parsers.SAXParser
			 * 其实用默认解析器(不用加入其他的包)也可以解析 (速度100mm)
                         *jdk自带的60mm(这里的速度是是一个参考)
			 */
			SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser");
			Document doc = builder.build(isr);
			root = doc.getRootElement();// 根节点
			isr.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return root;
	}

	/**
	 * 根据根元素下的元素名及该元素的子元素名返回该元素的子元素的值
	 * @param parent根元素下的元素名
	 * @param child 根元素下的元素的子元素名
	 * @return 根元素下的元素的子元素的值
	 */
	public static String getElementValue(String parent,String child){
		getRootElement();
		String value="";
		List<Element> elementList=root.getChildren(parent);
		value=elementList.get(0).getChildTextTrim(child);
		return value;
	}
	
	/**
	 * 如果根元素存在2个或以上一样的子元素的话,就用他们不同name的值来区别他们
	 * 根据根元素下的元素名及该元素的子元素名和值,返回该元素其他子元素的值
	 * @param parent根元素下的元素名
	 * @param child 根元素下的元素的第一个子元素名(即name)
	 * @param name_value 根元素下的元素的子元素的值
	 * @return Map<元素名,元素值>
	 */
	public static Map<String,String> getElementValues(String parent,String child,String name_value){
		Map<String,String> values=new HashMap<String,String>();
                getRootElement();
		List<Element> elementList=root.getChildren(parent);
		for(Element element:elementList){
			if(name_value.equalsIgnoreCase(element.getChildTextTrim(child))){
				List<Element> children=element.getChildren();
				for(Element e:children){
					values.put(e.getName(), e.getTextTrim());
				}
			}
		}
		return values;
	}
	//测试
	public static void main(String[] args){
		String name=getElementValue("person","name");
		System.out.println(name);
		Map<String,String> values=getElementValues("person","name","kyo");
		System.out.println(values.get("age"));
		
	}
}

<?xml version="1.0" encoding="UTF-8"?>
<animal>
<person>
<name> huanglq</name>
<age>21</age>
</person>
<person>
<name>kyo</name>
<age>22</age>
</person>

<dog>
<name>toly</name>
<age>1</age>
</dog>
<dog>
<name>tom</name>
<age>3</age>
</dog>
</animal>

你可能感兴趣的:(apache,log4j,xml)