XML格式数据,即可扩展标记语言(标准通用标记语言的子集)是一种简单的数据存储语言。
//DefaultHandler解析XML格式数据
class ParserXml extends DefaultHandler{
/*
* 使用stack数据结构,它是后进先出的特点
*/
private Stack<String> stack = new Stack<String>();
//返回的保存着配置文件路径的字符串数组
ArrayList<String> list=new ArrayList<String>();
//定义变量用来保存数据
private String path1;
private String path2;
private String addr;
private String port;
private String URL;
//开始解析
public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
//qName:表示元素的名字,标签的名字。
stack.push(qName); //将元素名字压到栈顶
}
//解析
public void characters(char[] ch, int start, int length)
throws SAXException {
//peek()把栈中的值拿出来,当不弹出来,只取出值而已
//pop()把栈中的值弹出来
String tag = stack.peek();
//在输出元素内容之前,我们必须知道当前元素是哪一个元素,所以我们要进行判断
if("path1".equals(tag)){
//提取元素内容
path1 = new String(ch, start, length);
}
else if("path2".equals(tag)){
path2 = new String(ch, start, length);
}else if("addr".equals(tag))
{
addr=new String(ch, start, length);
}
else if("port".equals(tag)){
port=new String(ch, start, length);
}else if("URL".equals(tag))
{
URL=new String(ch, start, length);
}
}
//结束解析
public void endElement(String uri, String localName, String qName)
throws SAXException {
//遇到元素结尾,表示该元素已经解析完毕,需要从栈中弹出
stack.pop();
//monitorpath下的元素
if("monitorpath".equals(qName))
{
list.add(path1);
list.add(path2);
}
//ftp下的元素
else if("ftp".equals(qName))
{
list.add(addr);
list.add(port);
}
//DataBase下的元素
else if("DataBase".equals(qName))
{
list.add(URL);
}
}
public ArrayList<String> Xmlreturn(String path,ParserXml xh)
{
//创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到SAX的解析器
try {
SAXParser parser = factory.newSAXParser();
parser.parse(new File(path), xh);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//返回数据集合
return list;
}
public static void main(String[] args)
{
ParserXml parserXml=new ParserXml();
//传入xml数据的路径和解析工厂
ArrayList<String> arrayList=parserXml.Xmlreturn("path.xml",parserXml);
for(String s:arrayList)
{
System.out.println(s);
}
}
}
上面是解析xml的代码,将如下xml格式数据和工程放在一起即可。路径也可以自己定义输入。
<?xml version="1.0" encoding="UTF-8"?>
<user>
<!--目录监控的信息-->
<monitorpath>
<path1>E:\\Listentest</path1>
<path2>null</path2>
</monitorpath>
<!--FTP服务器的链接信息-->
<ftp>
<addr>127.0.0.1</addr>
<port>21</port>
</ftp>
<DataBase>
<URL>jdbc:mysql://127.0.0.1:3306/dataaudit</URL>
</DataBase>
</user>