复习题
1.什么是XML?XML的特点有哪些?
答案:
XML(eXtensible Markup Language,可扩展标记语言),是由万维网联盟(World Wide Web Consortium,W3C)定义的一种数据交换的规范,是Web上的数据通用语言,使用一系列简单的标记描述数据c。
XML的特点有:
(1)XML是一种简单、与平台无关并被广泛采用的标准,可用于Internet上的各种应用。
(2)XML兼容SGML,所以多数SGML应用可转化为XML。
(3)XML文件同HTML文件一样易于创建。
(4)XML文件内容、结构简单,可以更加灵活地进行编程,减少了服务器的工作量。
(5)XML文件结构严谨,可以轻松被计算机程序解析。
(6)XML相对于HTML的优点是它将用户界面与结构化数据分隔开来。这种数据与显示的分离使得集成来自不同源的数据成为可能。
2.简述XML与HTML的区别。
答案:
(1)HTML语言是用来格式化web数据的语言,有固定的标记,每一个标记都有其固定的用法。XML允许自定义标记,用户可以自己定义标记来描述自己领域的信息。
(2)HTML的语法也相当宽松,标记不一定要配对使用,名称不区分大小写。XML语言有其严格的语法规则,标记必须成对使用,严格区分名称的大小写。
(3)不能够很好的描述数据的结构,本质上是一种格式显示语言。XML语言的特点就是将信息的内容和它们的显示样式区分开来,焦点是数据的内容。
3.简述XML解析器的种类及解析步骤。
答案:
XML的解析器分成两大类:综合的解析器和专用的解析器。综合的解析器又分为:基于DOM的解析器和基于事件的解析器。
基于DOM的解析器解析XML文件的一般步骤如下:
(1)扫描命令行得到XML文件名;
(2)创建一个解析器对象;
(3)告诉解析器解析命令行中给定的XML文件;
(4)遍历DOM结果树向标准输出打印;
基于SAX的解析器解析XML文件的一般步骤如下:
(1)创建一个事件处理程序。
(2)创建SAX解析器。
(3)向解析器分配事件处理程序。
(4)解析文档,同时向事件处理程序发送每个事件。
1.XML声明中有哪些属性?都有什么作用?
答案:
XML声明中包含3个属性:version、encoding和standalone。它们的作用分别是:
version属性:指出该XML文件使用的XML版本,目前取值只有1.0。
encoding属性:该属性规定了该XML文件采用编码的字集。取值有:UTF-8、GB2312、ISO-8859-1等。
Standalone属性:声明XML的独立性,即是否与其他文件相关联。取值有yes和no。
5.下面的XML文件中有哪些错误?改正之后用IE验证。
xml version=”1.1” ?>
1.2
1.8
答案:
有5处错误:注释位置不正确;声明中xml前不能有空格;版本号应为1.0;
”1.0” ?>
1.什么是有效的XML文件?IE能否检查一个XML文件的有效性?
答案:
符合XML语法规则的XML文件称为规范的XML文件,规范的XML文件再满足其关联的DTD或Schema文件中的约束,这样的XML文件就称为有效的XML文件。
IE不能检查一个XML文件是否是有效的,只能检查XML文件的规范性。要检查一个XML文件的有效性,需通过DOM或SAX解析器。
2.如何将DTD关联到XML文件?
答案:
通过文档类型声明来关联DTD和XML。格式为:
根标记名称 SYSTEM “DTD的URI”>
根标记名称 PUBLIC “正式公用标识符” “DTD的URI”>
SYSTEM用于非标准化的外部DTD,PUBLIC用于标准化的外部DTD。
5.下面的文件正确吗?为什么?用IE和本章中的解析器验证你的结论。
mes.dtd
name sex (male|female) "male">
“(#PCDATA)”>
emergency
fire CDATA #FIXED"119"
police CDATA#FIXED "110"
hospital CDATA#FIXED "120"
>
mes.xml
答案:
不正确。有5处错误,“”句“#PCDATA”与“tel”之间应该用“|”,或去掉“#PCDATA”;参数实体应先声明后使用;文档类型声明缺少根元素;“name”的“sex”属性取值错误;“emergency”的“fire”属性取值错误。正确的文件:
mes.dtd
name sex (male|female) "male">
emergency
fire CDATA #FIXED"119"
police CDATA#FIXED "110"
hospital CDATA#FIXED "120"
>
mes.xml
XML文件如何调用CSS样式?
答案:
XML文件调用CSS有3中形式:引用一个外部CSS文件、将CSS语句嵌入到XML文件、同时应用内部CSS和外部CSS。
XML文件调用独立的CSS文件的方法是在XML文件中加入下面一条处理指令:
”text/css”href=”CSS文件的URI”?>
调用内部的CSS通过名称空间的方法引入HTML的style标记:
CSS代码
在XML文件中同时加入上面两段代码就是同时应用内部CSS和外部CSS。
2.如果有一个标记“
答案:
name{
display:block;
font-family:楷体;
font-size:20pt;
color:blue;
background-color:yellow;
}
图5-17
4.为下面的XML文件添加CSS样式,使之显示的效果如图5-18所示。
图5-17
答案:
book{
display:block;
width:400;
border-style:double;
border-right:none;
border-bottom:none;
border-left:none;
}
title{
display:list-item;
text-align:center;
font-size:15;
padding-top:5;
font-weight:bolder;
}
author{
display:block;
list-style-type:square;
font-size:13;
font-style:italic;
font-weight:bold;
background-color:yellow;
}
price{
display:line;
text-align:center;
position:relative;
top:-30;
left:350;
}
discretion{
display:block;
width:300;
text-indent:25;
line-height:2;
}
#xiyou{
display:block;
width:70;
height:100;
background:url(xiyou.bmp);
float:right;
}
#honglou{
display:block;
width:70;
height:100;
background:url(honglou.bmp);
float:right;
}
1.XSL与CSS有哪些不同之处?
答案:
XSL和CSS都可以格式化XML。它们之间主要有以下不同之处:
(1)CSS有局限性。CSS没有办法让XML文件中的同一个数据多次在页面上显示出来,而XSL却能做到这一点。这是因为它们的需找数据的机理是不同的,CSS技术的显示机理是从头到尾一次扫描XML文件,遇到匹配的标记,就以当前的样式显示。XSL则是通过路径的方式来定位数据,从而可以轻易地提取出特定的数据。
(2)CSS语法简单。CSS只是通过选择符和属性列表来定义数据的样式,XSL则提供了循环、条件、选择等控制语句。从这方面讲,XSL更接近于程序设计语言,可以和其他语言进行数据交互,较CSS有本质上的区别。
(3)从语法上讲,XSL是一种特殊的XML文件。因此,XSl必须满足XML规范。CSS则是具有其自身语法的语言。
2.一个XSL文件的基本结构是什么?
答案:
XSL文件是一个特殊的XML文件,所以,XSL的文件结构必须满足XML规范,一个XSL样式文件也必须有XML声明。编码必须和其关联的XML文件编码一致。XSL样式文件的根标记必须是“stylesheet”,必须包含版本声明。使用的名称空间是http://www.w3c.org/TR/WD-xsl。还应该包含根模板。一个XSL样式文件的最基本的结构应该如下代码所示:
内容描述
1.什么是数据岛?为什么要引用数据岛?如何声明一个数据岛?
答案:
数据岛是指存在于HTML页面中的XML代码,作为HTML页面数据的来源。
通过数据岛这种技术,实现了页面范围内数据和显示的分离。可以提高数据的共享性,方便数据的维护;可以提高程序的扩展性和代码的重用性。
声明数据岛通过标记
2.如何实现HTML对象和数据岛的绑定并取出需要的数据?
答案:
在HTML中实现对象和数据岛绑定通过对象的“datasrc”属性实现,属性的值为“#”加上数据岛的名称。
从数据岛中取数据的方法是通过HTML对象的“datafld”属性实现,吧需要的数据的标记名称做为“datafld”属性的值。
3.通过记录集管理数据岛都有哪些方法?
答案:
通过记录集管理数据岛,包括取记录、遍历记录、插入和删除记录、对记录集分页和把记录集转换为数组。
取记录有如下方法:
rs(‘标记名称’)
rs(标记的编号)
rs.Fields(‘标记名称’)
rs.Fields(标记的编号)
rs.Fields.Item(‘标记名称’)
rs.Fields.Item(标记的编号)
遍历记录有如下方法:
moveNex()方法:当前记录移动到下一条记录。
movePrevious()方法:当前记录移动到上一条记录。
moveFirst()方法:当前记录移动到第一条记录。
moveLast()方法:当前记录移动到最后一条记录。
moveNumRecords()方法:当前记录向前或向后移动到指定数目的记录。
插入和删除记录的方法包括:
Addnew()方法:添加新纪录
Delete()方法:删除记录
对记录集分页通过设置如下属性实现:
AbsolutePage属性,用于指定当前的页。
PageCount属性,返回记录集中的逻辑页数。
PageSize属性,用于指定每个逻辑页所包含的记录数,默认值是10。
把记录集转换为数组通过getrows()方法实现。
5.编写HTML代码,以下面的XML文件为数据源对象,显示的结果如图7-16所示。功能要求:
(1)分页显示数据。
(2)点击“首页”、“上一页”、“下一页”或“尾页”按钮进行相应页的跳转。
(3)在文本框中输入页码,点击“确定”按钮可以跳到相应的页。
图7-16 程序运行结果
所需的XML文件代码如下:
答案:
部分国家电话直拨区号表
第
转到第
var rs =students.recordset;
rs.pagesize=3;
functionfirstpage(){
rs.absolutepage=1;
disp();
}
functionpreviouspage(){
if(rs.absolutepage==1){
alert("已经是第一页!");
}else{
rs.absolutepage=rs.absolutepage-1;
disp();
}
}
functionnextpage(){
if(rs.absolutepage==rs.pagecount){
alert("已经是最后一页!");
}else{
rs.absolutepage=rs.absolutepage+1;
disp();
}
}
functionlastpage(){
rs.absolutepage=rs.pagecount;
disp();
}
functiongotopage(pagenum){
if(pagenum>=1&&pagenum<=rs.pagecount){
rs.absolutepage=pagenum;
disp();
}else{
alert("输入的页码错误!");
}
}
functiondisp(){
stu_tab="";
stu_tab=" stu_tab=stu_tab+" stu_tab=stu_tab+" for(i=1;i<=rs.pagesize;i++){ if(i<=rs.pagesize&&!rs.EOF){ stu_tab=stu_tab+" stu_tab=stu_tab+" if(i rs.moveNext(); } } } stu_tab=stu_tab+"
";
s_t.innerHTML=stu_tab;
cpage.innerHTML=rs.absolutepage;
tpage.innerHTML=rs.pagecount;
}
disp()
DOM接口中的Document节点有哪两个子节点?分别代表什么意义?
答案:
Document类型节点的两个子节类型点是DocumentType类型和Element类型。
DocumentType类型节点对应XML文件所关联的DTD文件,通过DocumentType节点的子孙关系可以分析并获得XML文件所关联的DTD文件中的数据。
Element类型节点对应XML文件的标记节点,通过Element节点的子孙关系可以获得XML文件中的数据,Element节点的子节点有Element节点、Text节点和CDATASection节点。
2.Attr节点是Element节点的子节点吗?
答案:
不是。
在XML文件中,属性是标记信息的补充描述,不是标记的子标记。所以,在DOM中Attr对象是包含在Element对象中的,不是Element节点的子节点。要获得Element节点的Attr节点需要Element节点调用getAttribute()方法,该方法返回一个NamedNodeMap对象,NamedNodeMap对象由节点组成,这些节点可以转换为Attr节点。
3.有如下XML代码段:
可以通过哪些方法获得标记
答案:
第一种方法:获得Element节点“element”,通过Node接口的getTextContent()方法获得“element”节点的文本数据。
第二种方法:获得Element节点“element”的子节点,即Text类型节点,通过Text节点的getWholeText()方法获得文本数据。
4.编写Java程序,解析如下的XML文件,要求输出的结果如图8-12所示。
”1.0” encoding=”gb2312”?>
小李
小张
小赵
图8-12 程序运行结果
答案:
import org.w3c.dom.*;
importjavax.xml.parsers.*;
public class xiti4 {
public static voidmain(String[] args) {
int n = 0;
floatmathscore = 0;
floatenglishscore = 0;
floattotalmath = 0;
float totaleng= 0;
try {
DocumentBuilderFactoryfactory = DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder = factory.newDocumentBuilder();
Documentdocument = builder.parse("xiti4.xml");
System.out.println("=====成绩单=====");
NodeListnodeList = document.getElementsByTagName("name");
for (int i= 0; i < nodeList.getLength(); i++) {
Nodenode = nodeList.item(i);
NodeListcNodeList = node.getChildNodes();
System.out.print(cNodeList.item(0).getTextContent());
for(int j = 0; j < cNodeList.getLength(); j++) {
NodecNode = cNodeList.item(j);
if(cNode.getNodeType() == Node.ELEMENT_NODE) {
StringnodeName = cNode.getNodeName();
if (nodeName == "math") {
System.out.print(nodeName+":");
mathscore= Float.parseFloat(cNode.getTextContent());
totalmath+= mathscore;
System.out.println(mathscore);
}
if(nodeName == "english") {
System.out.print(nodeName+":");
englishscore= Float.parseFloat(cNode.getTextContent());
totaleng+= englishscore;
System.out.println(englishscore);
n++;
System.out.println("总分:"+(mathscore+englishscore));
}
}
}
}
System.out.println("=====平均分=====");
System.out.println("math:"+(totalmath/n));
System.out.println("english:"+(totaleng/n));
} catch(Exception e) {
e.printStackTrace();
}
}
}