只是为了考试
期末复习提纲
一、考试题型介绍
1.选择题(20分)
2.填空题(10分)
3.简答题(20分)
4.程序填空题(20分)
5.编程题(30分)
二、复习重点
1.xml文档的结构以及XML文档的组成部分
答:一个XML文档大体可以分为三个区域:序言区、主体区、尾声区(可选)
XML文档的起始部分,包含文档的相关信息:版本信息、编码信息文档独立性信息等(处理指令)
由一个或多个元素组成层次数,只能包含唯一根元素
尾声区可选:包含注释、处理指令等
2.文档对象模型
答:DOM 是用于 XML 文档的与平台和语言无关的编程接口
DOM 定义如何操作和访问 XML 文档
要通过 DOM 访问 XML 文档,需要以下两个组件:1、XML解析器2、DOM 实现
DOM 创建的节点树是 XML 文件的内容的逻辑表示
简单说,DOM是一组独立于语言和平台的应用程序编程接口,它能够描述如何访问和操纵存储在XML和HTML文档中的信息。
删除节点
3.Xpath语言
答:XPath是一种在XSL中采用的,用来定位XML文档部分内容的语言
4.为什么引入命名空间,有哪些优缺点
和其它语言里面的命名空间一样,都是用来避免名称冲突的。这样重名的元素或属性可以用不同的命名空间来区分开来,有了命名空间区分后相同标签名可以不会被错误解析
5.DTD定义XmL有哪些局限性
①语法结构问题:DTD的语法与XML语法不一样,使用DOM、XPath、XSLT等技术无法处理它,为自动化文档处理带来困难;
②数据类型问题: DTD的数据类型有限,也不能自由扩充不利于在XML数据交换场合验证数据类型。
③文档结构问题:DTD中,所有元素、属性都是全局的,无法声明仅与上下文位置相关的元素或属性
④名称空间问题:DTD中没有名称空间的概念,不直接支持名称空间
6.DTD和Schema有哪些区别,Schema的优势?
6.你在项目中经常使用的xml技术有哪些?如何实现的?
7.根据Schema视图和xml文档,会写出Schema文档
8.四大解析器如何解析和创建xml文档,重点jdom、dom4j
http://blog.csdn.net/jack_wong2010/article/details/8292647
jdom:
* 类描述:Jdom读取XML文件
public class JdomRead {
publicvoid parseXml(File xmlFile) throwsException {
//在内存中建立一个saxbuilder文档模型
SAXBuildersaxBuilder=new SAXBuilder();
//根据xmlFile文件创建文档
Documentdoc=saxBuilder.build(xmlFile);
//获得文档根元素
Elementroot=doc.getRootElement();
System.out.println("文档根元素是:"+root.getName());
//获得根元素的所有子元素
List<Element>childList = root.getChildren();
for(int i = 0; i < childList.size(); i++) {
Elementelement=childList.get(i);
System.out.println("第"+(i+1)+"个孩子节点是:"+element.getName());
}
//获得第2个孩子的节点
System.out.println("第2个孩子节点的属性名和值start。。。");
ElementsecondChild=childList.get(1);
//获得第2个孩子节点的属性,并迭代遍历输出属性的名称,值和类型
List<Attribute>attrs=secondChild.getAttributes();
for(int i = 0; i < attrs.size(); i++) {
Attributeattr=attrs.get(i);
//属性名称
System.out.println("属性名称:"+attr.getName());
//属性值
System.out.println("属性值:"+attr.getValue());
//属性类型
System.out.println("属性类型:"+attr.getAttributeType());
}
System.out.println("第2个孩子节点的属性名和值end。。。");
//如果第2个元素包含有子元素,继续迭代输出
List<Element>sonElements=secondChild.getChildren();
for(int i = 0; i < sonElements.size(); i++) {
Elementele=sonElements.get(i);
System.out.println("第2个孩子的第"+(i+1)+"个子元素的名和值开始。。。");
System.out.println("子元素名:"+ele.getName());
System.out.println("子元素值:"+ele.getValue());
System.out.println("第2个孩子的第"+(i+1)+"个子元素的名和值结束。。。");
}
//如果第2个元素的子元素也有属性,继续获得属性迭代输出,略。。。
}
publicstatic void main(String[] args) throws Exception {
JdomReadjRead=new JdomRead();
jRead.parseXml(newFile("src/student.xml"));
}
}
* 类描述:Jdom创建XML文件
public class JdomWrite {
publicvoid bulidXml() throws Exception {
//根元素及属性
Elementroot = new Element("学生名册");
root.setAttribute("学校名称", "广州大学华软软件学院");
Elementstudent = new Element("学生");
student.setAttribute("年级", "12级");
student.setAttribute("学号", "12012345");
Elementname =new Element("姓名");
name.setText("张三");
//性别
Elementsex = new Element("性别");
sex.setText("男");
//年龄
Elementage= new Element("年龄");
age.setText("21");
//生日
Elementbirthday= new Element("生日");
birthday.setText("1991-01-01");
//生成文档对象,并将根元素置入文档中
Documentdoc=new Document(root);
//依次添加其它元素
student.addContent(name);
student.addContent(sex);
student.addContent(age);
student.addContent(birthday);
root.addContent(student);
//定义格式化输出对象,格式化xml文档
Formatformat= Format.getPrettyFormat();//有三种方式选择
//定义缩进字符串,字符编码集
format.setIndent(" ");
format.setEncoding("utf-8");
//创建xml输出器
XMLOutputter outputter=newXMLOutputter(format);
//执行输出
outputter.output(doc,new FileWriter("src/student.xml"));
}
/**
* main(这里用一句话描述这个方法的作用)
* (这里描述这个方法适用条件 – 可选)
*/
publicstatic void main(String[] args) throws Exception {
System.out.println("开始生成xml文档。。。");
JdomWritejw=new JdomWrite();
jw.bulidXml();
System.out.println("xml文档生成结束。。。");
}
}
Dom4j
* 类描述:使用dom4j遍历xml文档
public class Dom4jRead {
publicstatic void main(String[] args) throws Exception {
//step1:获取解析器
SAXReadersaxReader=new SAXReader();
//step2:获取文档对象
Documentdoc=saxReader.read(new File("src/student1_dom4j.xml"));
//step3:获取文档根元素
Elementroot=doc.getRootElement();
//step4:递归解析文档子元素
parseElements(root);
}
//定义静态方法递归解析子元素
publicstatic void parseElements(Element element){
//step1:处理当前元素包含的所有属性
parseAttribute(element);
//step2:获取当前元素包含的所有子元素
ListeleList=element.elements();
//step3:遍历每个子元素
for(Object e : eleList) {
Elementelement2=(Element)e;
//如果该元素的内容不只是包含字符串
if(!element2.isTextOnly()) {
//递归解析
parseElements(element2);
}else{
//处理当前元素的全部属性
parseAttribute(element2);
//获取当前元素的内容
System.out.println(element2.getQName().getName()+"-->"+element2.getText());
}
}
}
//定义静态方法解析元素所有属性
publicstatic void parseAttribute(Element element) {
//step1:获取当前元素的所有属性
Listattrs=element.attributes();
//step2:遍历元素的每个属性
for(Object att : attrs) {
Attributeattribute=(Attribute)att;
//获取每个元素的属性名称和属性值
System.out.println(element.getQName().getName()+"元素的"
+attribute.getQName().getName()+"属性值为"+attribute.getValue());
}
}
}
* 类描述:使用dom4j创建xml文档
public class Dom4jWrite {
publicstatic void main(String[] args) throws Exception {
//创建文档并设置文档的根元素:第一种方式
// Documentdocument=DocumentHelper.createDocument();
// Elementroot= DocumentHelper.createElement("学生名册");
// document.setRootElement(root);
//创建文档并设置文档的根元素:第二种方式
Elementroot=DocumentHelper.createElement("学生名册");
Documentdocument=DocumentHelper.createDocument(root);
//根元素设置属性
root.addAttribute("学校", "广州大学华软软件学院");
//为根元素添加子元素
ElementstuElement=root.addElement("学生");
//为子元素设置属性
stuElement.addAttribute("年级", "13级").addAttribute("学号", "13098765");
//为子元素添加子元素
ElementnameElement=stuElement.addElement("姓名");
//设置子元素内容
nameElement.setText("仙人");
ElementsexeElement=stuElement.addElement("性别");
sexeElement.setText("女");
ElementageElement=stuElement.addElement("年龄");
ageElement.setText("18");
ElementbirElement=stuElement.addElement("生日");
birElement.setText("2018-08-08");
//定义输出流,输出文档,限于内存中
XMLWriterxmlWriter=new XMLWriter();
xmlWriter.write(document);
//指定文档输出格式
OutputFormatformat=new OutputFormat(" ",true);
//把文档输出到存储设备,硬盘:第一种方式
XMLWriterxmlWriter2=new XMLWriter(newFileOutputStream("src/student1_dom4j.xml"),format);
xmlWriter2.write(document);
//把文档输出到存储设备,硬盘:第二种方式
XMLWriterxmlWriter3=new XMLWriter(new FileWriter("src/student2_dom4j.xml"),format);
xmlWriter3.write(document);
//必须进行刷新和关闭,否则写入内容为空
xmlWriter3.flush();
//xmlWriter3.close();
}
}
9.xml和数据库之间的相互转换
10.json构建和解析