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());
}
}
}