JAVA解析xml(JDOM,DOM4J)

本文介绍了使用JDOM和DOM4J两种Java库解析XML文件的方法。通过实例展示了如何读取XML文档、获取根节点及子节点,并遍历元素和属性。这两种方法适用于从XML文件中提取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDOM解析xml

创建一个SAXBuilder对象,创建输入流  将xml加载到流中,将输入流加载到saxBuilder  返回Document对象

SAXBuilder saxBuilder=new SAXBuilder();
InputStream in=new FileInputStream("books.xml");
Document document=saxBuilder.build(in);
获取根节点
Element element=document.getRootElement();
获取子节点的集合

List<Element> list_element=element.getChildren();
然后通过ELement的getName与getValue方法进行解析

代码:

public class JdomText {
 
	static Book book;
	static ArrayList<Book> books=new ArrayList<>();
	public static void main(String[] args) {
		//创建一个SAXBuilder对象
		SAXBuilder saxBuilder=new SAXBuilder();
		try {
			//创建输入流  将xml加载到流中
			InputStream in=new FileInputStream("books.xml");
			//将输入流加载到saxBuilder  返回Document对象
			Document document=saxBuilder.build(in);
            //获取根节点
			Element element=document.getRootElement();
			//获取子节点
			List<Element> list_element=element.getChildren();
		    for (Element element2 : list_element) {
		    	book=new Book();
		    	System.out.println("开始遍历第"+(list_element.indexOf(element2)+1)+"本书");
                //已知属性名获取属性值
//				System.out.println(element2.getAttributeValue("id"));
		    	//获取属性的集合  遍历获取属性名与内容
                List<Attribute> list=element2.getAttributes();
                for (Attribute attribute : list) {
					System.out.print(attribute.getName());
					System.out.println("------"+attribute.getValue());
					if (attribute.getName().equals("id")) {
						book.setId(attribute.getValue());
					}

				}
                //获取book节点的子节点的集合  进行遍历  输出
               List<Element> list2= element2.getChildren();
               for (Element element3 : list2) {
				System.out.print(element3.getName());
				System.out.println("-----"+element3.getValue());
				if (element3.getName().equals("name")){
					book.setName(element3.getValue());
				}else if (element3.getName().equals("year")){
					book.setYear(element3.getValue());
				}else if (element3.getName().equals("price")){
					book.setPrice(element3.getValue());
				}
			}
               System.out.println("结束遍历第"+(list_element.indexOf(element2)+1)+"本书");
               books.add(book);
               book=null;
			}
		for (Book book : books) {
			System.out.println(book.getName()+"+-++-+-+++++");
		}
		
		
		
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
DOM4J解析

与JDOM不同在于,这个方法返回的是迭代器,那个是List

代码:

public class Dom4j_test {

	public static void main(String[] args) {
		//创建SAXReader对象
		SAXReader reader=new SAXReader();
		try {
			//加载xml文件 
			Document document= reader.read(new File("books.xml"));
			//获取根节点
			Element element=document.getRootElement();
			//获取迭代器
			Iterator<Element> iterator=element.elementIterator();
			while (iterator.hasNext()) {
				//获取节点
				Element element2 = (Element) iterator.next();
				//获取并遍历属性
				List<Attribute> attributes=element2.attributes();
				for (Attribute attribute : attributes) {
					System.out.println(attribute.getName()+"-----"+attribute.getValue());
				}			
				//获取book节点 的子节点  并遍历
			  Iterator<Element> iterator2= element2.elementIterator();
			  while (iterator2.hasNext()) {
				Element element3 = (Element) iterator2.next();
				System.out.println(element3.getName()+"-------"+element3.getStringValue());
			}
			
			
			}
			
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值