XML文件解析工具思想(抽象方法的使用)

本文介绍了一种基于Java的XML文件解析方法,详细说明了如何通过DocumentBuilder获取XML文档,并提供了针对不同标签解析的具体实现示例。

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

首先对于XML文件基础解析中说到,获取一个DocumentBuilder只需要执行一次,
但是对于获取XML文件位置需要用户来定。
首先完成XML文件路径的获取:
注意static

public static Document newDocument(String xmlPath) 
			throws XMLNotFoundException, SAXException, IOException {
		InputStream is = Class.class.getResourceAsStream(xmlPath);
		if (is == null) {
			throw new XMLNotFoundException("XML文件[" + xmlPath + "]不存在。");
		}
		return newDocument(is);
	}

实际就是吧之前4行代码后两行加到这个方法中。

接着对于XML文件重点就是不同Tag的解析:每个Tag解析都是相同的,只是对应的标签名需要改变。
先给出代码:

public abstract void dealElement(Element element, int index) throws Throwable;
	
	public void parseTag(Document document, String tagName) throws Throwable {
		NodeList nodeList = document.getElementsByTagName(tagName);
		for (int index = 0; index < nodeList.getLength(); index++) {
			Element element = (Element) nodeList.item(index);
			dealElement(element, index);
		}
	}
	
	public void parseTag(Element element, String tagName) throws Throwable {
		NodeList nodeList = element.getElementsByTagName(tagName);
		for (int index = 0; index < nodeList.getLength(); index++) {
			Element ele = (Element) nodeList.item(index);
			dealElement(ele, index);
		}
	}

对于根标签和子标签分别使用Document类和Element类
注意这里有一个抽象方法,即这个XMLParser类在实例化时,需要用户来定义这个抽象类。
这样就可以做到根据不同的XML文件内容,有不同的获取方法且该方法由用户来定。

调用方法:

XMLParser xmlParser = new XMLParser() {
			@Override
			public void dealElement(Element element, int index) throws Throwable { //定义一个标签属性获取的抽象方法
				StringBuffer str = new StringBuffer();
				
				String id = element.getAttribute("id");
				str.append("id = ").append(id);
				String name = element.getAttribute("name");
				str.append(", name = ").append(name);
				String sex = element.getAttribute("sex");
				str.append(", sex = ").append(sex);
				String birthday = element.getAttribute("birth");
				str.append(", birth = ").append(birthday);
				
				new XMLParser() {
					
					@Override
					public void dealElement(Element element, int index) throws Throwable { //子标签获取方法
						String hobbyId = element.getAttribute("id");
						String hobbyName = element.getTextContent();
						str.append("\n\t").append(hobbyId).append(":").append(hobbyName);
					}
				}.parseTag(element, "hobby");  //匿名对象 直接调用
				
				new XMLParser() {
					
					@Override
					public void dealElement(Element element, int index) throws Throwable { //子标签获取方法
						String introduceText = element.getTextContent().trim();	
						str.append("\n简介:").append(introduceText);
					}
				}.parseTag(element, "introduce");  //匿名对象 直接调用
				
				System.out.println(str);
			}
		};
		
Document document = XMLParser.newDocument("/关于XML/student.xml");
xmlParser.parseTag(document, "student"); //根标签的获取

具体解释见注释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值