一、DOM 解析

思路:获得Document对象,遍历其中节点获得需要的内容

要点:

Document :  DocuemntBuilderFactory --newDocumentBuilder --parse(xml文件输入流)

根节点: getDocumentElement()

子节点 :NodeLIst list=root.getChildNodes();  Node n=list.item(index);

属性: element.getAttribute("id")  或者 node.getAttributes().getNamedItem("XXX").getNodeValue();

文本:node.getTextContent();  或者 node.getNodeValue();

部分代码:

         //1.  建立一个解析器工厂:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2. 获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3. 将xml文件加载到内存中,得到表示整个文档的Document对象
InputStream inStream=DomParser.class.getClassLoader().getResourceAsStream("book.xml");
Document doc=db.parse(inStream);
//4. 根据标签名获得对应的Node集合
NodeList bookList=doc.getElementsByTagName("book");
//5. 对集合进行遍历
for(int i=0;i<bookList.getLength();i++){
Book book=new Book();
Element ele=(Element)bookList.item(i);//取出当前节点
String id=ele.getAttribute("id");//根据属性名获得属性值
book.setId(id);
Node nameNode=ele.getElementsByTagName("name").item(0);//获取唯一的name节点
String name=nameNode.getFirstChild().getNodeValue();//获得文本值
book.setName(name);
Node authorNode=ele.getElementsByTagName("author").item(0);//获取唯一的author节点
String author=authorNode.getFirstChild().getNodeValue();//获得文本值
book.setAuthor(author);
resultMap.put(book.getId(), book);

二、SAX解析

思路:获得SAXParser,调用parser 方法

要点:

工厂获得实例:SAXParserFactory — newSAXParser

parser.parse(input, handler); 该方法有两个参数,前一个是文件或者输入流,后一个是事件监听器(助手类)

新建助手类 继承 DefaultHandler ,重写需要的方法

部分代码:

 SaxParser:
//1. 将xml文件加载到内存中,得到表示整个文档的Document对象
InputStream inStream=DomParser.class.getClassLoader().getResourceAsStream("book.xml");
//2. 创建Sax解析工厂类
SAXParserFactory factory=SAXParserFactory.newInstance();
//3. 得的Sax解析器
SAXParser parser=factory.newSAXParser();
//4. 创建助手类的实例
SaxHandler handler=new SaxHandler();
//5. 解析文件
parser.parse(inStream, handler);
//6. 获得解析结果
List<Book> result=handler.getResultList();
for(Book b:result){
System.out.println(b);
}

事件监听器类(助手类):

在控制台打印信息,同时将信息封装入LIst

 public class MyDefaultHandler extends DefaultHandler{
List<Student> list=new ArrayList();
Student s=null; private String value;
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.print("文档解析开始"); } @Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("\n文档解析结束");
System.out.println(list.toString());
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException { if("student".equals(qName)){
System.out.println("\n学生信息:");
s=new Student();
s.setId(Integer.parseInt(attributes.getValue(0)));
}
if("name".equals(qName)){
System.out.print("姓名:"); }
if("telephone".equals(qName)){
System.out.print("电话:"); }
if("addrs".equals(qName)){
System.out.print("地址:"); }
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print(" ");
if("student".equals(qName)){
list.add(s);
} if("name".equals(qName)){
s.setName(value);
}
if("telephone".equals(qName)){
s.setTelephone(value);
}
if("addrs".equals(qName)){
s.setAddr(value);
} } @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
value=new String(ch, start,length).trim();
System.out.print(value); }

XML文件的解析—DOM、SAX的更多相关文章

  1. 解析XML文件之使用DOM解析器

    在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...

  2. Java是如何解析xml文件的(DOM)

    Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...

  3. 用SAX和PULL进行XML文件的解析与生成

    XML解析有传统的dom方法还有Jsoup,SAX,PULL等,这里讲的是比较省内存的SAX和PULL方法.Android中极力推荐用PULL的方式来解析,我个人觉得pull确实比较简单,但其内部的逻 ...

  4. Android XML文档解析(一)——SAX解析

    ---------------------------------------------------------------------------------------------------- ...

  5. [置顶] Android开发之XML文件的解析

    Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...

  6. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  7. JDOM方法实现对XML文件的解析

    首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...

  8. xml文件的解析

    1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...

  9. 类的反射及xml文件的解析

    类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...

随机推荐

  1. React props

    class WebSite extends React.Component { constructor() { super(); this.state = { name: "菜鸟教程&quo ...

  2. jquery+ajax搜索并分页

    定义一个点击事件,获取关键词,传到后台,根据关键词搜索并分页.获取根据关键词分页后的数据,展示到前台.直接替换原来的数据. //接收当前页 $page = Request::instance()-&g ...

  3. python3编码

    一.字符编码 1.什么实字符编码:将人识别的字符转换成计算机能识别的01,而转换的过程或者规则就是字符编码表. 而这种字符编码表表示了一种对应关系. 2.常用的字符编码表有:ascii.unicode ...

  4. Tinker热修复

    集成buggly热修复的时候报错 Error:A problem occurred configuring project ‘:app’. Failed to notify project evalu ...

  5. nvm管理node版本

    一.介绍与作用 不同的项目中可能使用的node版本不同,对于维护多个版本的node就是一件麻烦事了,而nvm就可以很方便的管理不同的node版本, 可以在不同的node版本间切换使用.NVM资源(针对 ...

  6. PeopleSoft查看所有translate value

    下面sql可以列出PS中所有translate value SELECT FIELDNAME, FIELDVALUE, EFFDT, EFF_STATUS, XLATLONGNAME, XLATSHO ...

  7. angular1时间控件之时间比较大小,比如入住日期和离店日期,入住不能晚于离店时间

    功能可能是大家有时遇到的,不过angluar1现在用的人很少了,希望帮上和我一样掉坑里的朋友吧,之前自己也在网上找过几乎没找到angluar1和我代码需求一样的控件,没办法自己造 了,看代码图 就差不 ...

  8. javaMail实现收发邮件(五)

    控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类型的数据处理模块,我们只需要在把数据流传输给浏 ...

  9. 在Tomcat文件中,点击start.bat启动的是另一个tomcat

    遇到问题:在下载了一个免安装的Tomcat7之后解压,点击startup.bat启动tomcat,却报了异常. 后来在电脑一个文件夹中发现了另一个Tomcat8,是安装版本,并配置了环境变量.其环境变 ...

  10. ES6学习笔记(let,const,变量的解构赋值)

    1.let: ; i < 3; i++) { let i = 'abc'; console.log(i); } // abc // abc // abc 不存在变量提升,它所声明的变量一定要在声 ...