xml基础复习习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、选择题
1.XML采用以下哪种数据组织结构?( C )
A 星状结构
B 线状结构C树状结构D网状结构
2.下列关于XML文档中根元素的说法不正确的是( D )
A每一个结构完整的XML文档中有且只有一个根元素
B 根元素完全包括了文档中其他所有元素
C 根元素的起始标记要放在其他所有元素的起始标记之前,而根元素的结束标记要放在其他所有元素的结束标记之后
D 根元素不能包含属性节点
3.下面哪个公司或组织制定了XML:( C )
A ISO
B Oracle
C W3C
D Micrsoft
4.>、<、&等在XML文档中被赋予了特殊的意义,所以在XML文档中不能直接包含这
些字符,而是对这些字符采用了特殊编码,< 对应的特殊编码是:(B)
A &
B <
C &lgt;
D &quto;
5.在DTD声明中使用下列哪个符号可以允许元素不出现或者只出现一次?(A)
A ?
B *
C |
D +
6.在一个DTD元素中定义了一个元素“学员”为<!ELEMENT 学员(#PCDA TA)>,那么
如下的XML实例片段中合法的是( A )
A <学员>张三</学员>
B <学员><姓名>张三</姓名></学员>
C </学员>
D <学员>一班<姓名>张三</姓名>同学</学员>
7.分析以下在DTD文档:
<!ELEMENT doc(title?,chap*)> (*零次或多次)(?零次或一次)(+ 一次或多次)
<! ELEMENT title(#PCDATA)>
<! ELEMENT chap(sect+)>
<! ELEMENT sect(para+)>
<! ELEMENT para(#PCDATA)>
下面的XML实例(C)能够通过DTD的校验。
A <doc><chap><para>Text</para></chap></doc>
B <doc><chap><sect><para>Text</para></chap></doc>
C <doc><title>Text</title></doc>
D <doc><title>Text</title><sect><para>Text</para></sect></doc>
8.以下说法不符合XML语法规则的是( C )
A)标记头和标记末的大小写一致
B)元素之间要正确的嵌套
C)结束标记可有可无
D)每个XML文档只能有一个根元素
9.以下XML片段写法正确的是( D )
A <root attribute=”first”/>
B <root attribute=first />
C <root attribute/>
D <root attribute=”first” value=”aaa”/>
E <root attribute=”first” value=”aaa”>
10.用于修饰属性的缺省值不包含哪一项( C )
A #FIXED
B #REQUIRED
C #PCDATA
D #IMPLIED
11.以下DTD元素声明不正确的是( A )
A)<ELEMENT root (#PCDATA)> B)<! ELEMENT root (a|b)*>
C)<! ELEMENT root (a,b+)> D)<! ELEMENT root (#PCDATA)> 12.以下关于SAX的说法正确的是( B )
A)使用SAX可修改XML
B)SAX是事件驱动型XML解析器
C)SAX是对象模型XML解析器
D)以上答案都不对
13.DTD中,属性用( D )关键字声明。
A. ENTITY
B. ELEMENT
C. DOCTYPE
D. A TTLIST
14.DOM解析中,下面( A )方法可以获得XML文档节点树的根元素节点。
A.getDocumentElement() B. getEntities()
C. getPublicID()
D. getWholeText()
15.下列标记定义不合法的是(C)。
A. <price>
B. <_author>
C. <2title>
D. <>
16.解析下面XML文档时,下列说法正确的是(A)。
<book>
<author>耿祥义</author>
<ISBN>9787302206491</ISBN>
</book>
A. “耿祥义”是文本对象
B. “耿祥义”是元素对象
C. <book>是元素对象,同样也是文本对象
D. <ISBN>是元素对象,同样也是文本对象
17.关于DOM的描述错误的是(C)。
A. DOM使开发者能够以编程方式读取、操作和修改XML文档
B. W3C组织公布了DOM模型的规范,然后各个软件厂商(比如微软)再根据W3C的规范开发DOM解析器,并且提供一系列的编程API,这些API都是遵守W3C规范的
C. DOM模型是W3C组织开发出来的一个在内存中表示XML数据的线性模型
D. 能使用JavaScript进行DOM开发,也能使用Java、C#
18.XML名称空间名是指(C)。
A. W3C制定的一个技术规范
B. 一个可以访问到的URI
C. 任何URI
D. 紧跟在xmlns:后面的前缀名称
19.当SAX解析器解析到文档中元素的开始标记时,会调用( A )方法。
A.public void startElement()
B.public void startDocument()
C.public void startPrefixMapping()
D.public void startDocumentLocator()
20.以下事件处理函数哪一个不是SAX实现会产生的(C)
A void startDocument()
B void characters(char[] ch, int start, int length)
C void startElement(String uri, String localName, String qName)
D void endElement(String uri, String localName, String qName)
21.SAX的默认基类DefaultHandler类实现了那些接口( A )
A)Attributes接口
B)DTDHandler接口
C)ErrorHandler接口
D)ContentHandler接口
22.声明语句<!ATTIBLIST student studentID ID #REQUIRED>的作用是( D )
A、声明元素student的属性studentID是可有可无的;
B、声明元素student的属性studentID是唯一标识类型,可以省略;
C、声明元素student的属性studentID是默认取值,可以省略;
D、声明元素student的属性studentID是唯一标识类型,不可省略;
23.在XML文档的第一条声明语句中,不能使用的属性是( D)
A、version
B、encoding
C、standalone
D、name
24.不符合格式良好的XML文档要求的是( A )
A、文档可以有一个以上的根元素;
B、有符合规范的声明语句;
C、每个元素有正确的起始、结束标记;
D、元素正确嵌套,没有交叉现象出现;
25.在进行属性声明时,错误的是(B)
A 标记中可以使用多个属性
B 属性可以出现在起始标记或结束标记中;
C 属性名是大小写敏感的;
D 属性值必须用引号引上;
26.以下不属于XML语法规定的是(B)
A、元素必须正确嵌套
B、标记任意大小写
C、所有的属性值必须放在双引号或单引号中;
D、若文档没有DTD,属性值的默认类型是“CDA TA”;
27.声明语句<!ELEMENT 学生信息((地址,成绩)|#PCDATA)>指明元素学生信息是
( B )
A、任意子元素组成;
B、由子元素“地址”“成绩”和字符数据混合组成;
C、由字符“地址,成绩”和字符“#PCDA TA”组成;
D、由文本类数据组成
28.在XML中,下列关于DOM的叙述不正确的。
D
a) DOM是独立于开发语言和平台的,因此使用Visnal Basic、Java、Visual C++等开发工具使用的DOM编程API是一致的
b) XML文档通过load方法被装载进内存后,在内存中形成一个DOM文档对象模型树
c) 通过DOM API,软件开发人员可以控制XML文档的结构和内容
d)通过DOM在XML文档中只能按照顺序方式导航
29.XML中,(B)是文档对象模型DOM中的基本对象,元素、属性、注释、处理指令等
都可以认为是它。
A Document
B Node
C NodeList
D Element
30.阅读下面XML文档,然后判断下列说法正确的是。
C
<book>
<author>tom</author>
<bookcode>12</bookcode>
</book>
a) <book>是元素对象,同样也是文本对象
b) <author>是元素对象,同样也是文本对象
c) tom是文本对象
d) tom是元素对象
31.<?xml version="1.0"?>
<!DOCTYPE customer[
<!ENTITY location "jianwai street">
]>
<customer>
<name>jack</name>
<address>&location;</address>
</customer>
关于上述Xml文档,以下描述正确的是( B )。
a) 该Xml文档中使用了外部DTD。
b) 通过浏览器打开上述Xml文档时,字符串jianwai street代替了& location;
c) 该Xml文档不是有效的XML文档。
32.XML( A )提供了一种避免元素命名冲突的方法。
A.命名空间
B.DTD
C.XSD
D.XSL
33.以下关于XML文档的声明的语句正确的是。
D
A)<xml version="1.0" encoding="UTF-8">
B)<?XML version="1.0" encoding="UTF-8"?>
C)<?xml Version="1.0" encoding="UTF-8"?>
D)<?xml version="1.0" encoding="UTF-8"?>
二、填空题
1.____名称空间__________是解决XML元素多义性和名字冲突问题的方案。
2.XML元素由___开始标记__________、结束标记和两者之间的内容三部分组成。
3.DTD全称为_ Document Type Definition_____,它分为外部DTD和___内部DTD___两
种。
4.XSL文件中,主模板的match属性值为___ /_____。
5.DTD文件中,表示元素能出现零次或多次的限定符号为___*_________。
6.DTD中%字符用于声明____参数_______实体。
实体定义<!ENTITY MJ “Michael
Jordan”>,则XML文档中引用“MJ”实体的表达式为___&MJ;______。
7.DOM全称为_Document Object Model__,DOM解析采用文档驱动,SAX解析使用__
事件__驱动。
8.SAX解析器是否报告XML声明给事件处理器?_____否______(填“是”或“否”)
9.下面代码中的“学生信息”是_____根________元素;
<?xml version=”1.0”>
<?DOCTYPE 学生信息SYSTEM “stu.dtd”>
<!ELEMENT 学生信息(#PCDA TA)>
10.在DTD的个数限制中常使用的符号是:_*_ 、_?___和_+__;
11.在DTD文档中下面语句的作用是_声明一个元素名为教师,有子标记并按顺序输出姓
名,性别_;
<!ELEMENT 教师(姓名,性别)>
12.在DTD文档中下面语句的作用是_声明外部普通实体实体引用为picl 引用实体内容
为fil.gpg_;
<!ENTITIE pic1 SYSTEM “fi1.jpg”>
13.声明语句<!ATTLIST姓名身份证号ID #REQUIRED>的作用是为__姓名_元素声明__
身份证__属性;
14.<?xml version="1.0" encoding="gb2312"?>是__xml声明_________。
15.在DTD中,元素类型是通过__ELEMENT__标记声明的。
16.属性类型设为ID,表明该属性的取值____必须唯一__________________。
17.xml定义了两种类型的entity。
一种是_参数实体___ ;另一种是__普通实体__。
dtd中指定,属性是必选属性要使用的关键字是:_#REQUIRED__;指定属性是可选属性要使用的关键字是_#FIXED__
三、简答题
1.什么是XML?
a)新一代网络数据表示,传递和交换的标准是Internet环境中跨平台的依赖于内容的
技术
2.简述XML与HTML的区别
a)xml是可扩展的元素与属性名称区分大小写,标签用于组织数据,样式可以独立于
元素之外,内容中的空白有意义,空标签需要的特殊用法,html是有固定标签的
不可扩展元素与属性名称不区分大小写,标签用来展示元素外观,空标签不需要特
殊用法忽略多余空白字
3.什么是DTD?它可以分为几类?
a)DTD是Document Type Definition 文档类型定义可以分为内部DTD和外部DTD
4.什么是SAX?简述SAX的工作原理。
a)SAX是Simple API for xml 简单应用程序编写接口.
b)工作原理:
i.1,创建事件处理程序
ii.2,创建SAX解析器
iii.3,将事件处理程序分配给解析器
iv.4,对文档进行解析将每个事件发送给处理程序事件
5.写出下列缩略词对应的中文意思,及英文全称。
a)XML:
b)DTD:
c)XSLT:
d)DOM:
6.SAX与DOM在解析器的核心分别是什么,他们的优缺点是什么,分别使用在处理什
么问题!
dom是w3c指定的一套规范标准,核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的“树”,这树各节点和xml各标记对应,通过操纵此“树”来处理xml中的文件。
xml文件很大时,建立的“树”也会大,所以会大量占用内存。
、sax解析器占内存少,效率高。
sax解析器核心是事件处理机制。
通过对SAX与DOM的分析,它们各有自己的不同应用领域。
SAX适于处理下面的问题:
a)对大型文件进行处理;
b)只需要文件夹的部分内容,或者只需从文件中得到特定信息。
c)想建立自己的对象模型的时候。
DOM适于处理下面的问题:
a)需要对文件进行修改;
b)需要随机对文件进行存取。
7.监听器概念
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
Servle监听器:在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext, HttpSession 和 ServletRequest 这三个域对象。
Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型。
监听三个域对象创建和销毁的事件监听器监听域对象中属性的增加和删除的事件监听器监听绑定到 HttpSession 域中的某个对象的状态的事件监听器。
监听servletContext域对象创建和销毁:ServletContextListener 接口用于监听 ServletContext 对象的创建和销毁事件。
当 ServletContext 对象被创建时,激发contextInitialized (ServletContextEvent sce)方法当 ServletContext 对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。
和其它事件监听器略有不同的是,servlet监听器的注册不是直接注册在事件源上,而是由WEB容器负责注册,开发人员只需在web.xml文件中使用<listener>标签配置好监听器,web容器就会自动把监听器注册到事件源中。
一个 web.xml 文件中可以配置多个 Servlet 事件监听器,web 服务器按照它们在 web.xml 文件中的注册顺序来加载和注册这些 Serlvet 事件监听器。
监听HttpSession域对象创建和销毁:HttpSessionListener接口用于监听HttpSession创建和销毁创建一个Session时,sessionCreated (HttpSessionEvent se)方法将会被调用。
销毁一个Session时,sessionDestroyed (HttpSessionEvent se)方法将会被调用。
Session域对象创建和销毁的时机创建:用户每一次访问时,服务器创建session销毁:如果用户的session 30分钟没有使用,服务器就会销毁session,我们在web.xml里面也可以配置session失效时间监听HttpRequest域对象创建和销毁:ServletRequestListener 接口用于监听ServletRequest 对象的创建
和销毁。
Request 对象被创建时,监听器的requestInitialized方法将会被调用。
Request对象被销毁时,监听器的requestDestroyed方法将会被调用。
(此处复习request对象,在浏览器窗口中多次刷新访问servlet,看request 对象的创建和销毁,并写一个servlet,然后用sendRedirect、forward方式跳转到其它servlet,查看request对象的创建和消耗)
servletRequest域对象创建和销毁的时机:创建:用户每一次访问,都会
创建一个reqeust销毁:当前访问结束,request对象就会销毁
8.<c:choose>标签根据嵌入的子标签<c:when>决定执行哪个内容。
如果没有一个条件成立,
如果有<c:otherwise>子标签,就执行其中的<c:otherwise>标签体中的内容。
<c:choose>、<c:when> 和<c:otherwise>标签可以用于实现if-else语句的功能。
<c:when>和<c:otherwise>标签只能作为<c:choose>的子标签,不能单独使用;<c:choose>标签体中必须有<c:when>标签,但可以没有<c:otherwise>标签。
如果有<c:otherwise>标签,则<c:when>标签必须在<c:otherwise>之前。
9.如果要实现Tag接口,可以通过扩展TagSupport这个类,来写自己需要的方法,而不
需要把Tag接口中的所有方法实现。
10.简述struts1的工作原理图:
1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的
Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts
中不同的模块初始化相应的对象。
(面向对象思想)
2.发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。
3.form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员
变量中。
4.派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并
传给这个Action中的excute()方法。
5.处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)
完毕后返回一个ActionForward对象。
服务器通过ActionForward对象进行转发工作。
6.返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。
7.查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下
为jsp页面。
8.响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。
四、程序填空题
1.<?xml version=”1.0”encoding=" UTF-8 "?>
< !DOCTYPE UNIVERSITY[
<!ELEMENT UNIVERSITY ( NAME, ADDRESS)>
<!ELEMENT NAME (#PCDA TA)>
<!ELEMENT ADDRESS (#PCDA TA)>
<!ENTITY name "青岛大学">
<!ENTITY address "宁夏路308号">
]>
<!--this is a comment-->
< UNIVERSITY >
<!--NAME元素中的内容为实体name中的内容-->
<NAME> &name;</NAME>
<!-- ADDRESS元素中的内容为实体address中的内容-->
<ADDRESS> &address;</ADDRESS>
</ UNIVERSITY >
2.< !DOCTYPE PRODUCTDA TA SYSTEM" 1.dtd"> <!—外部DTD--> <PRODUCTDATA>
<PRODUCT PRODUCTID="P001" >
<PRODUCTNAME>Gone With the Wind</PRODUCTNAME>
<PRICE>25.00</PRICE>
<QUANTITY>35</QUANTITY>
</PRODUCT>
</PRODUCTDATA>
3.使用DOM解析XML文件代码如下,读程序完成填空。
exam2.xml代码如下:
<?xml version="1.0" encoding="GB2312"?>
<school>
<student ID="s101" sex="女">
<name>李华</name>
<age>12</age>
<score>92</score>
</student>
</school>
exam2.java代码如下:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public class ExamTest {
public static void main(String args[]) throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//DOM解析返回文档对象
①_Document__ doc = builder.parse(new File("exam2.xml"));
//获得文档根元素节点
②_Element__ root = doc.getDocumentElement();
//获得根节点下元素标记名为student的所有的元素节点的集合③_Nodelist_ nl = root.getElementsByTagName("student");
for (int i = 0; i < nl. getLength(); i++) {
//获取nl集合中的第i个节点对象
Element stu = (Element)nl.item(i);
//获得元素student属性的集合
④_NamedNodeMap__ map = book.getAttributes();
//循环输出map中所有的属性
for (int k = 0; k < map.getLength(); k++) {
⑤_Attr_ attrNode = (⑤_Attr_)map.item(k);
System.out.print(attrNode.getName() + "="
+ attrNode.getValue() + " ");
}
//获得student标记下所有子节点集合
NodeList eNl = stu.getChildNodes();
//遍历所有子节点
for (int j = 0; j < eNl.getLength(); j++) {
⑥_Nodelis t_ child = eNl.item(j);
if (child.getNodeType() == child.ELEMENT_NODE) {
Element eNode = (Element)child;
}
if (child.getNodeType() == child.TEXT_NODE) {
⑦_Text__ tNode = (⑦_Text_)child;
}} }}}
4.例如jsp中要求取出request中保存的一个属性username,以前习惯的方式:
<%
String username=(String)request.getAttribute("user");
out.println(username);
%>
或者
<%
String username=(String)request.getAttribute("user");
%>
<%=user%>
在使用jstl后,则可以直接书写为:
<c:out value="${user}"/>(或者直接${user}) 或${param.[ " user " ]}。