博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解析XML文件
阅读量:7098 次
发布时间:2019-06-28

本文共 7009 字,大约阅读时间需要 23 分钟。

XML文件

1.编写*.xml文件

<?xml version = "1.0" encoding="utf-8"?>

<disks>

<disk name='c'>

<name>系统盘</name>  

<size>10G</size>

<directory>4</directory>

<file>100</file>

</disk>

<disk  name='d'>

<name>工作盘</name>

<size>10G</size>

<directory>3</directory>

<file>200</file>

</disk>

</disks>

<!-- 一定存在结尾和开始标签 -->

点击*.xml文件,右键---open with---web brower--浏览器打开

右键

---properties---location--(C:\Users\lrq\Workspaces\MyEclipse 10\Corejava\src\com\briup\xml\disk.xml

2.解析xml文件

两种类:

Sax解析 从上到下能取到一次

 

public abstract class SAXParserFactory

extends

发现是抽象类,抽象类首先找到他的子类或者找到他的静态方法

SAXParserFactory

public abstract  newSAXParser()

                                throws ,

                                       

SAXParser

public void parse( f,

                   dh)

           throws ,

                  

使用指定的  将指定文件的内容解析为 XML。

 

 

 

package com.briup.xml;

import java.io.File;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class DiskSax {

public static void main(String[] args) {

// 保证xml是否能读到

// SaxParserFactory 解析工厂

SAXParserFactory factory = SAXParserFactory.newInstance();

try {

SAXParser paser= factory.newSAXParser();

// 调用parse方法进行解析

File file = new File("src/com/briup/xml/disk.xml");

paser.parse(file,new MyHandler());

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

}

class MyHandler extends DefaultHandler{

 

// 1表示开始标签名称

// 2 属性标签

@Override

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

// System.out.println("<"+localName+">");

System.out.print("<"+qName);

for(int i =0;i<attributes.getLength();i++){

// 获取标签名称

String qName1= attributes.getQName(i);

String value = attributes.getValue(qName1);

System.out.print(" "+qName1+"="+value+"'");

}

System.out.print(">");

}

 

@Override

public void endElement(String uri, String localName, String qName)

throws SAXException {

System.out.print("</"+qName+">");

 

}

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

System.out.print(new String(ch, start, length));

}

 

  }

<disks>

<disk name=c'>

<name>系统盘</name>  

<size>10G</size>

<directory>4</directory>

<file>100</file>

</disk>

<disk name=d'>

<name>工作盘</name>

<size>10G</size>

<directory>3</directory>

<file>200</file>

</disk>

</disks>

编写Student.xml文件

<?xml version="1.0" encoding="utf-8"?>

<students>

<student id="1">

<name>tom</name>

<age>20</age>

<gender>male</gender>

</student>

<student id="2">

<name>jack</name>

<age>21</age>

<gender>male</gender>

</student>

<student id="3">

<name>rose</name>

<age>20</age>

<gender>female</gender>

</student>

 

</students>

创建Student类是为了将Student.xml文件内容封装到Student类里面。

package com.briup.xml;

public class Student {

private int id ;

private String name ;

private int age;

private String gender ;

public Student(int id, String name, int age, String gender) {

super();

this.id = id;

this.name = name;

this.age = age;

this.gender = gender;

}

public Student() {}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

@Override

public String toString() {

return "id:"+id+"name:"+name+"age:"+age+"gender:"+gender;

}

}

 

解析xml文件

1.sax方法

public abstract class SAXParserFactory

extends

定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档。

 

 

package com.briup.xml;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler; //注意这个包不要抛错了

public class StudentSax {

public static void main(String[] args) {

//首先需要创建SAX工程,接受一个factory实例

SAXParserFactory factory =

SAXParserFactory.newInstance();

try {

SAXParser parser = factory.newSAXParser();

File file = new File("src/com/briup/xml/student.xml") ;

MyHander2 mh = new MyHander2();

parser.parse(file, mh);

List<Student> list = mh.list;

for(Student List1:list){

System.out.println(List1);

}

} catch (Exception e) {

e.printStackTrace();

}

 

}

}

class MyHander2 extends DefaultHandler{

private String tagName;

Student student;

    List<Student>  list = new ArrayList<Student>();

@Override

public void characters(char[] ch, int start, int length) throws SAXException {

String str = new String(ch,start,length) ;

if("name".equals(tagName)){

student.setName(str);

}else if("age".equals(tagName)){

student.setAge(Integer.parseInt(str));

}else if("gender".equals(tagName)){

student.setGender(str);

// System.out.println(student);

}

 

}

 

@Override

public void endElement(String uri, String localName, String qName) throws SAXException {

if(qName.equals("student")){

list.add(student);

}

tagName = null;

}

 

// qName是标签名称

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

if("student".equals(qName)){

String id = attributes.getValue("id");

 student = new Student();

student.setId(Integer.parseInt(id));

// System.out.println(student);

}

 

tagName = qName;

}

 

}

2.xml使用dom解析

package com.briup.xml;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

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.Node;

import org.w3c.dom.NodeList;

public class StudentDOM {

public static void main(String[] args) {

List<Student> list= new ArrayList<Student>();

 

// 解析器工厂

DocumentBuilderFactory  factory = DocumentBuilderFactory.newInstance();

   try {

DocumentBuilder builder = factory.newDocumentBuilder();

File file = new File("src/com/briup/xml/student.xml");

// getElementByTagName(tagName)

Document document = builder.parse(file);

NodeList nl = document.getElementsByTagName("student");

// getLength:获取长度,便厉得到node对象

for(int i = 0;i < nl.getLength();i++){

Node n =nl.item(i);

Element e = (Element)n;

String id = e.getAttribute("id");

Student student = new Student();

student.setId(Integer.parseInt(id));

NodeList nl2 = n.getChildNodes();

for(int j=0;j<nl2.getLength();j++){

Node n2=nl2.item(j);

// 获取标签名称

if(n2.getNodeName().equals("name")){

// 获取name标签内容

String name = n2.getTextContent();

student.setName(name);

}

if(n2.getNodeName().equals("age")){

// 获取age标签内容

int age =Integer.parseInt(n2.getTextContent());

student.setAge(age);

}

if(n2.getNodeName().equals("gender")){

// 获取gender标签内容

String gender = n2.getTextContent();

student.setGender(gender);

System.out.println(student);

}

 }

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

  }

}

转载于:https://www.cnblogs.com/xiaoxuesherry/p/5686548.html

你可能感兴趣的文章
docker 创建 工作环境
查看>>
从零开始开发一款H5小游戏(一) 重温canvas的基础用法
查看>>
网页浏览器知道我们的哪些信息?(2)
查看>>
CSS不常用属性---Tips1文本样式
查看>>
深入 Flask 源码理解 Context
查看>>
js原型和继承
查看>>
在Github上部署Ghost
查看>>
Android Studio 快捷键 for Mac OS X
查看>>
[分享]你写过 Web 爬虫, 那么你写过 P2P 爬虫吗?
查看>>
Session原理
查看>>
[Leetcode] Rotate Image 旋转图片
查看>>
GOAndroid的安装和配置
查看>>
JavaScript 内存机制(前端同学进阶必备)
查看>>
javascript dom的图片最终版源代码 (重复看)
查看>>
innobackupex在线备份及恢复(全量和增量)
查看>>
spring-AspectJ最终通知
查看>>
中国电信涉足VR,以“情景式VR消费计划”带来商业变现
查看>>
逃离智能家居“怪圈”,智能音箱并不是唯一入口
查看>>
Linux 格式化扩展分区(Extended)
查看>>
MySQL 安装步骤详解
查看>>