面试题整理:xml部分

1、XML文档定义有几种形式?它们之间有何本质区别?xml有哪些解析技术?区别是什么? 

答:

a:两种形式  dtd schema;

b:本质区别:schema 本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的);

c:有DOM,SAX,STAX等 ;

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

SAX:不同于DOM,SAX是事件驱动型的XML解析方式,用推模式解析。解析器解析完整个xml文档后,才产生解析事件,然后推给程序去处理这些事件。如果解析文档过程中产生问题,则剩余的所有文档就无法处理。

STAX:Streaming API for XML (StAX),是一种利用拉模式解析(pull-parsing)XML文档的API。解析器首先将XML文档所有的事件全部取出,然后通过处理程序处理这些事件。如果解析文档过程中产生问题,只会影响到出问题的部分,其余部分处理不受影响。

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

答:用到了数据存贮,信息配置两方面。

在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理。

在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

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

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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DOMTest {
	private String outFile = "c:\\people.xml";

	public static void main(String args[]) {
		new DOMTest();
	}

	public DOMTest() {
		try {
			DocumentBuilder builder = DocumentBuilderFactory.newInstance()
							.newDocumentBuilder();
			Document doc = builder.newDocument();
			Element root = doc.createElement("老师");
			Element wang = doc.createElement("王");
			wang.appendChild(doc.createTextNode("我是王老师"));
			root.appendChild(wang);
			doc.appendChild(root);
			Transformer transformer = TransformerFactory.newInstance().newTransformer();
			transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			transformer.transform(new DOMSource(doc),new StreamResult(outFile));
		
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值