java面试题之XML部分(一)

1xml有哪些解析技术?区别是什么?

答:有DOM,SAX,STAX等

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

STAX:Streaming API for XML (StAX)

讲解这些区别是不需要特别去比较,就像说传智播客与其他培训机构的区别时,我们只需说清楚传智播客有什么特点和优点就行了,这就已经间接回答了彼此的区别。

2、你在项目中用到了xml技术的哪些方面?如何实现的?

答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

3、用jdom解析xml文件时如何解决中文问题?如何解析?

答:看如下代码,用编码方式加以解决

package test; 
import java.io.*; 
public class DOMTest { 
    private String inFile = "c:\\people.xml"
    private String outFile = "c:\\people.xml"
    public static void main(String args[]){
        new DOMTest(); 
    } 
    public DOMTest(){
        try{
        javax.xml.parsers.DocumentBuilder builder = 
                      javax.xml.parsers.DocumentBuilderFactory
                     .newInstance().newDocumentBuilder(); 
        org.w3c.dom.Document doc = builder.newDocument(); 
        org.w3c.dom.Element root = doc.createElement("老师"); 
        org.w3c.dom.Element wang = doc.createElement("王"); 
        org.w3c.dom.Element liu = doc.createElement("刘"); 
        wang.appendChild(doc.createTextNode("我是王老师")); 
        root.appendChild(wang); 
        doc.appendChild(root); 
        javax.xml.transform.Transformer transformer = 
                    javax.xml.transform.TransformerFactory
                    .newInstance().newTransformer(); 
         transformer.setOutputProperty(javax.xml.transform
                    .OutputKeys.ENCODING, "gb2312"); 
         transformer.setOutputProperty(javax.xml.transform
                    .OutputKeys.INDENT, "yes"); 
         transformer.transform(new javax.xml.transform.
                    dom.DOMSource(doc), 
                    new javax.xml.transform.stream.StreamResult(
                    outFile));
        }catch (Exception e){
            System.out.println (e.getMessage()); 
        } 
    } 
}

4、编程用JAVA解析XML的方式.

答:用SAX方式解析XML,XML文件如下:

<?xml version=1.0 encoding=gb2312?> 
<person> 
    <name>王小明</name> 
    <college>信息学院</college> 
    <telephone>6258113</telephone> 
    <notes>男,1955年生,博士,95年调入海南大学</notes> 
</person>

事件回调类SAXHandler.java

import java.io.*; 
import java.util.Hashtable; 
import org.xml.sax.*; 
public class SAXHandler extends HandlerBase{
    private Hashtable table = new Hashtable(); 
    private String currentElement = null; 
    private String currentValue = null; 
    public void setTable(Hashtable table){
        this.table = table; 
    } 
    public Hashtable getTable(){
        return table; 
    } 
      public void startElement(String tag, AttributeList attrs) 
        throws SAXException{
        currentElement = tag; 
    } 
    public void characters(char[] ch, int start, int length) 
        throws SAXException{
        currentValue = new String(ch, start, length); 
    } 
    public void endElement(String name) throws SAXException{
        if (currentElement.equals(name)) 
            table.put(currentElement, currentValue); 
    } 
  
}

JSP内容显示源码,SaxXml.jsp:

<HTML> 
<HEAD> 
<TITLE>剖析XML文件people.xml</TITLE> 
</HEAD> 
<BODY> 
<%@ page errorPage=ErrPage.jsp 
contentType=text/html;charset=GB2312 %> 
<%@ page import=java.io.* %> 
<%@ page import=java.util.Hashtable %> 
<%@ page import=org.w3c.dom.* %> 
<%@ page import=org.xml.sax.* %> 
<%@ page import=javax.xml.parsers.SAXParserFactory %> 
<%@ page import=javax.xml.parsers.SAXParser %> 
<%@ page import=SAXHandler %> 
<% 
File file = new File(c:\people.xml); 
FileReader reader = new FileReader(file); 
Parser parser; 
SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
SAXHandler handler = new SAXHandler(); 
sp.parse(new InputSource(reader), handler); 
Hashtable hashTable = handler.getTable(); 
out.println(<TABLE BORDER=2><CAPTION>教师信息表</CAPTION>); 
out.println(<TR><TD>姓名</TD> + <TD> + 
(String)hashTable.get(new String(name)) + </TD></TR>); 
out.println(<TR><TD>学院</TD> + <TD> + 
(String)hashTable.get(new String(college))+</TD></TR>); 
out.println(<TR><TD>电话</TD> + <TD> + 
(String)hashTable.get(new String(telephone)) + </TD></TR>); 
out.println(<TR><TD>备注</TD> + <TD> + 
(String)hashTable.get(new String(notes)) + </TD></TR>); 
out.println(</TABLE>); 
%> 
</BODY> 
</HTML>

5XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

a: 两种形式 dtd  schema,b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),c:有DOM,SAX,STAX等

  DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问

SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

  STAX:Streaming API for XML (StAX)

本文链接:领悟书生教程网-面试题大全,转载请注明出处

2019-03-05 16:05

开源项目

知识点

相关教程

更多

java算法与编程面试题(一)

编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。

Java web面试题(一)

本章的主要内容包括以下内容:Tomcat的优化经验,HTTP请求的GET与POST方式的区别,Servlet的生命周期,Servlet的基本架构, jsp有哪些内置对象?作用分别是什么? 分别有什么方法?

Java代码查错面试题

代码出错对于每一个程序员来说都不会陌生,但是经常让人抓狂到不行的也是这些小小错误,针对一些常见的问题,昆明达内培训小编整理了这个java代码查错的系列文章,和大家相互学习。

Java基础面试题(一)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(十)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(三)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(二)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(四)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(十一)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(五)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(七)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(六)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(八)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

Java基础面试题(九)

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。

《进入IT企业必读的324个JAVA面试题》扫描版[PDF]

中文名: 进入IT企业必读的324个JAVA面试题    作者: 张昆    图书分类: 软件    资源格式: PDF    版本: 扫描版    出版社: 电子工业出版社    书号: 9787121138065    发行时间: 2011年08月    地区: 大陆    语言: 简体中文    简介:        内容简介:    本书涵盖了Java面试中会经常出现的问题,并指导读者快速

最新教程

更多

java线程状态详解(6种)

java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。 线程在运行过程中有6种状态,分别如下: NEW:初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态” BLOCK:阻塞状态,表示线程阻塞

redis从库只读设置-redis集群管理

默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave.  127.0.0.1:6382> set k3 111  (error) READONLY You can't write against a read only slave. 如果你要开启从库

Netty环境配置

netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。

Netty基于流的传输处理

​在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据

Netty入门实例-使用POJO代替ByteBuf

使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。

Netty入门实例-时间服务器

Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现

Netty入门实例-编写服务器端程序

channelRead()处理程序方法实现如下

Netty开发环境配置

最新版本的Netty 4.x和JDK 1.6及更高版本

电商平台数据库设计

电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表

HttpClient 上传文件

我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity。

MongoDB常用命令

查看当前使用的数据库    > db    test  切换数据库   > use foobar    switched to db foobar  插入文档    > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new

快速了解MongoDB【基本概念与体系结构】

什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

windows系统安装MongoDB

安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我

Spring boot整合MyBatis-Plus 之二:增删改查

基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baom

分布式ID生成器【snowflake雪花算法】

基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案