XML解析的完成以及工具化----------------破晓

解析XML文件的Jar包在文章最末尾

#1.怎么书写一个XML文件
提前说明:我们使用的是eclipse
在你想声明XML文件的包目录下右键,选择new,再点击other
右键点击
点击完成后,我们会看到这样的界面
建立
选中XML文件,最后我们会得到这样的效果
XML文件
这样我们就得到一个XML文件了
接下来我们书写一个XML文件,书写格式十分简单,大家模仿下面的书写方式即可。

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student id = "06113045" name = "臭弟弟"  sex = "男">
		<hobby>唱歌</hobby>
		<hobby>跳舞</hobby>
		<hobby>Rap</hobby>
	</student>
	<student id = "06123077" name = "威猛先生" sex = "男">
		<hobby>LoL</hobby>
		<hobby>学习</hobby>
		<hobby>斗地主</hobby>
	</student>
</students>

尖括号里面的叫做标签,这只是一个名字写什么都可以

下面就是XML文件的两种写法
第一种一种就是第一行把内容写在尖括号里 名字 = 内容在写下一对时一定要用空格隔开。
第二种则是写在标签外

<student id = "06123077" name = "威猛先生" sex = "男">
<hobby>学习</hobby>

#2.怎么解析一个XML文件
首先我要说明我的XML文件的所在路径
XML文件路径
解析过程
提前声明:下面很多代码初学者看起来会很难受,难以接受,不能理解,这很正常,大家都一样,我们要明白编程最重要的是逻辑思路,解析XML文件只是我们实现一个大程序所需要的一种手段,所以作为初学者,我们先把它当作神仙的咒语,先接受它。

package com.mec.Xml.core;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

//这里面有很多语法让初学者很难理解,我们要做的是把它当作巫师的咒语,先接受它
public class XmlParse {
	public static void main(String[] args) {
		//下面括号里面写的东西就是XML文件的路径
		InputStream is = XmlParse.class.getResourceAsStream("/lib/NewFile.xml");
		try {
			//下面两行,巫师的咒语我们先接受它
			DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			Document doc = db.parse(is);
			
			NodeList studentList = doc.getElementsByTagName("student");
			
			for (int i = 0 ; i < studentList.getLength() ; i++) {
				Element elements = (Element)studentList.item(i);
				String id = elements.getAttribute("id");
				String name = elements.getAttribute("name");
				String sex = elements.getAttribute("sex");
				//输出一下
				System.out.println(id + name + sex);
				NodeList hobbyList = elements.getElementsByTagName("hobby");
				
				for (int j = 0 ; j < hobbyList.getLength() ; j++) {
					Element elem = (Element)hobbyList.item(j);
					
					String hobby = elem.getTextContent();
					//S输出一下
					System.out.println(hobby);
				}
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
}

运行结果:
运行结果
#3.将XML文件工具化
首先我们要明白为什么要将解析XML文件的代码工具化
原因如下:
大家也看到了上述代码,一个解析XML文件的代码要写那么长,而且还有很多不能理解的语法,如果我们把它做成工具,这样以后我们需要解析XML文件时只需要使用我们的工具即可,大大提高了我们的编程效率,一劳永逸。

XML文件解析工具的源码

package com.mec.Xml.core;



import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public abstract class XMLParser {
	private static DocumentBuilder db;
	static {
		try {
			db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
	}
	
	public  XMLParser() {
		
	}
	public static Document load(String path) {
		InputStream is = XMLParser.class.getResourceAsStream(path);
		return load(is);
	}

	public static Document load(InputStream is) {
		Document doc;
		try {
			doc = db.parse(is);
			return doc;
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public abstract void dealMessage(Element element);

	public void parser(Document doc, String tagname) {
		
		NodeList list = doc.getElementsByTagName(tagname);
		for (int i = 0 ; i < list.getLength() ; i++) {
			Element element = (Element)list.item(i);
			dealMessage(element);
		}
	}
	
	public void parser(Element element, String tagname) {
		NodeList list  = element.getElementsByTagName(tagname);
		for (int i = 0 ; i < list.getLength() ; i++) {
			Element elem = (Element) list.item(i);
			dealMessage(elem);
		}
	}
}

使用我们的工具去解析我们之前写的XML文件

package com.mec.Text;

import org.w3c.dom.Element;

import com.mec.Xml.core.XMLParser;
import com.mec.Xml.core.XmlParse;

public class XMLParseText {
	public static void main(String[] args) {
		new XMLParser() {

			@Override
			public void dealMessage(Element element) {
				String id = element.getAttribute("id");
				String name = element.getAttribute("name");
				String sex = element.getAttribute("sex");
				System.out.println(id + name  + sex);
				new XMLParser() {

					@Override
					public void dealMessage(Element element) {
						String hobby = element.getTextContent();
						System.out.println(hobby);
					}
					
				}.parser(element, "hobby");
			}
			
		}.parser(XMLParser.load("/lib/NewFile.xml"), "student");
	}
}

运行结果:
在这里插入图片描述
最后为了大家使用方便我们给Jar包
https://pan.baidu.com/s/1DjxpNY00KA1Ag2PjFiJQLA
提取码:vo6w

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值