`

jdom解析xml文件

    博客分类:
  • java
阅读更多
<?xml version="1.0" encoding="UTF-8"?>
<persons>
 <person perid="1001">
  <name>jim</name>
  <age>89</age>
  <address>安徽淮北</address>
  <sex>男</sex>
 </person>
 
 <person perid="1002">
  <name>tom</name>
  <age>56</age>
  <address>北京海淀</address>
  <sex>女</sex>
 </person>
</persons>



[size=medium]
package jdomXml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

/**
 * jdom解析xml文件
 * 
 * @author ly *
 */
public class JDomXML {

	public JDomXML() {
	}

	/**
	 * 解析xml文件
	 * 
	 * @param xmlFile
	 */
	@SuppressWarnings("rawtypes")
	public void parseXml(File xmlFile) {
		SAXBuilder sax = new SAXBuilder(false);// 这表示使用的是默认的解析器.SAXBuilder是一个JDOM解析器
												// 能将路径中的XML文件解析为Document对象.
												// 在内存中建立一个sax文档模型,创建解析对象
		try {
			Document xmlDom = sax.build(xmlFile);// 解析对象调用build方法建立文档对象 ,创建文档
			// 获得文件的根元素
			Element root = xmlDom.getRootElement();
			System.out.println("根元素是:" + root.getName());

			// 获得根元素的子节点
			List childList = root.getChildren();
			for (Iterator iter = childList.iterator(); iter.hasNext();) {
				Element person = (Element) iter.next();
				String perid = person.getAttributeValue("perid");
				// 取得元素的子元素(为最低层元素)的值:
				String name = person.getChildTextTrim("name");
				System.out.println("孩子结点是:" + person.getName());
				System.out.println("perid:" + perid);
				System.out.println("name:" + name);
				// 注意的是,必须确定book元素的名为“name”的子元素只有一个。
				person.getChild("name").setText("alterrjzjh");// 这只是对Document的修改,并没有在实际的XML文档中进行修改
			}
			XMLOutputter outputter = new XMLOutputter();
			outputter.output(xmlDom, new FileOutputStream(xmlFile));
			// 保存Document的修改到XML文件中:我们先要有一个
			// XMLOutputter类,再把已经修改了的Document保存进XML文档中

			// 获得第一个孩子结点
			Element firstChild = (Element) childList.get(0);
			// 获得孩子结点的属性
			List attrList = firstChild.getAttributes();
			Iterator attrIt = attrList.iterator();
			while (attrIt.hasNext()) {
				Attribute attr = (Attribute) attrIt.next();
				System.out.println("第一个元素的属性是:" + attr.getName());
				// 获得属性的值
				System.out.println("属性的值是:" + attr.getValue());
				// 获得属性的类型
				System.out.println("属性的类型是:" + attr.getAttributeType());
			}

			List sonList = firstChild.getChildren();
			Iterator sonIt = sonList.iterator();
			while (sonIt.hasNext()) {
				Element temp = (Element) sonIt.next();
				System.out.println("属性" + temp.getName() + "的值是:"
						+ temp.getValue());
			}

		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		JDomXML test = new JDomXML();
		test.parseXml(new File("persons.xml"));
	}
}
[/size]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics