xml复习题及答案讲解



复习题

1.什么是XMLXML的特点有哪些?

答案:

XMLeXtensible Markup Language,可扩展标记语言),是由万维网联盟(World Wide Web ConsortiumW3C)定义的一种数据交换的规范,是Web上的数据通用语言,使用一系列简单的标记描述数据c

XML的特点有:

1XML是一种简单、与平台无关并被广泛采用的标准,可用于Internet上的各种应用。

2XML兼容SGML,所以多数SGML应用可转化为XML

3XML文件同HTML文件一样易于创建。

4XML文件内容、结构简单,可以更加灵活地进行编程,减少了服务器的工作量。

5XML文件结构严谨,可以轻松被计算机程序解析。

6XML相对于HTML的优点是它将用户界面与结构化数据分隔开来。这种数据与显示的分离使得集成来自不同源的数据成为可能。

2.简述XMLHTML的区别。

答案:

1HTML语言是用来格式化web数据的语言,有固定的标记,每一个标记都有其固定的用法。XML允许自定义标记,用户可以自己定义标记来描述自己领域的信息。

2HTML的语法也相当宽松,标记不一定要配对使用,名称不区分大小写。XML语言有其严格的语法规则,标记必须成对使用,严格区分名称的大小写。

3)不能够很好的描述数据的结构,本质上是一种格式显示语言。XML语言的特点就是将信息的内容和它们的显示样式区分开来,焦点是数据的内容。

3.简述XML解析器的种类及解析步骤。

答案:

    XML的解析器分成两大类:综合的解析器和专用的解析器。综合的解析器又分为:基于DOM的解析器和基于事件的解析器。

基于DOM的解析器解析XML文件的一般步骤如下:

    1)扫描命令行得到XML文件名;

    2)创建一个解析器对象;

    3)告诉解析器解析命令行中给定的XML文件;

    4)遍历DOM结果树向标准输出打印;

    基于SAX的解析器解析XML文件的一般步骤如下:

    1)创建一个事件处理程序。

    2)创建SAX解析器。

    3)向解析器分配事件处理程序。

    4)解析文档,同时向事件处理程序发送每个事件。

 

 

1XML声明中有哪些属性?都有什么作用?

答案:

XML声明中包含3个属性:versionencodingstandalone。它们的作用分别是:

version属性:指出该XML文件使用的XML版本,目前取值只有1.0

    encoding属性:该属性规定了该XML文件采用编码的字集。取值有:UTF-8GB2312ISO-8859-1等。

Standalone属性:声明XML的独立性,即是否与其他文件相关联。取值有yesno

5.下面的XML文件中有哪些错误?改正之后用IE验证。

    <!--一个简单的XML文件-->

    <?  xml version=1.1  ?>

    <fruits>

        <fruit>

        <name>orange<price>

        </name>1.2</price>

    </fruit>

    <fruit>

    <name>banana<price>

    </name>1.8</price>

    </fruit>

    </Fruits>

答案:

5处错误:注释位置不正确;声明中xml前不能有空格;版本号应为1.0<name><price>标记出现了交叉;根标记不匹配。正确的文件:

    <?xml version=1.0  ?>

    <!--一个简单的XML文件-->

    <fruits>

        <fruit>

        <name>orange</name>

        <price>1.2</price>

    </fruit>

    <fruit>

    <name>banana</name>

    <price>1.8</price>

    </fruit>

    </fruits>

1.什么是有效的XML文件?IE能否检查一个XML文件的有效性?

答案:

符合XML语法规则的XML文件称为规范的XML文件,规范的XML文件再满足其关联的DTDSchema文件中的约束,这样的XML文件就称为有效的XML文件。

IE不能检查一个XML文件是否是有效的,只能检查XML文件的规范性。要检查一个XML文件的有效性,需通过DOMSAX解析器。

2.如何将DTD关联到XML文件?

答案:

通过文档类型声明来关联DTDXML。格式为:

<!DOCTYPE  根标记名称  SYSTEM DTDURI>

<!DOCTYPE  根标记名称  PUBLIC “正式公用标识符” DTDURI>

SYSTEM用于非标准化的外部DTDPUBLIC用于标准化的外部DTD

5.下面的文件正确吗?为什么?IE和本章中的解析器验证你的结论。

    mes.dtd

    <!ELEMENT messageANY>

    <!ELEMENT persion(name,age?,lxfs)>

    <!ELEMENT lxfs(#PCDATA,tel|email)*>

    <!ELEMENT name(first,last)>

    <!ATTLIST  name sex (male|female) "male">

    <!ELEMENT first%pc; >

    <!ELEMENT last%pc;>

    <!ELEMENT age%pc;>

    <!ELEMENT tel%pc;>

    <!ELEMENT email%pc;>

    <!ENTITY % pc (#PCDATA)>

    <!ELEMENT emergencyEMPTY>

    <!ATTLIST  emergency

        fire CDATA #FIXED"119"

        police CDATA#FIXED "110"

        hospital CDATA#FIXED "120"

    >

   

    mes.xml

    <?xmlversion="1.0" encoding="gb2312"?>

    <!DOCTYPE SYSTEM"mes.dtd">

    <message>

    <persion>

    <name sex="">

    <first>li</first>

    <last>xiao</last>

    </name>

    <age>25</age>

    <lxfs>

    <tel>123456</tel>

    </lxfs>

    </persion>

    <persion>

    <name>

    <first>wang</first>

    <last>xiao</last>

    </name>

    <lxfs></lxfs>

    </persion>

    <emergencyfire="120" police="110" />

    </message>

答案:

不正确。有5处错误,“<!ELEMENT lxfs(#PCDATA,tel|email)*>”句“#PCDATA”与“tel”之间应该用“|”,或去掉“#PCDATA”;参数实体应先声明后使用;文档类型声明缺少根元素;“name”的“sex”属性取值错误;“emergency”的“fire”属性取值错误。正确的文件:

    mes.dtd

    <!ELEMENT messageANY>

    <!ELEMENT persion(name,age?,lxfs)>

    <!ELEMENT lxfs(#PCDATA|tel|email)*>

    <!ELEMENT name(first,last)>

    <!ATTLIST  name sex (male|female) "male">

    <!ENTITY % pc"(#PCDATA)">

    <!ELEMENT first%pc; >

    <!ELEMENT last%pc;>

    <!ELEMENT age%pc;>

    <!ELEMENT tel%pc;>

    <!ELEMENT email%pc;>

    <!ELEMENT emergencyEMPTY>

    <!ATTLIST  emergency

        fire CDATA #FIXED"119"

        police CDATA#FIXED "110"

        hospital CDATA#FIXED "120"

    >

   

    mes.xml

    <?xmlversion="1.0" encoding="gb2312"?>

    <!DOCTYPE messageSYSTEM "mes.dtd">

    <message>

    <persion>

    <name sex="male">

    <first>li</first>

    <last>xiao</last>

    </name>

    <age>25</age>

    <lxfs>

    <tel>123456</tel>

    </lxfs>

    </persion>

    <persion>

    <name>

    <first>wang</first>

    <last>xiao</last>

    </name>

    <lxfs></lxfs>

    </persion>

    <emergencyfire="119" police="110" />

    </message>

 

XML文件如何调用CSS样式?

答案:

XML文件调用CSS3中形式:引用一个外部CSS文件、将CSS语句嵌入到XML文件、同时应用内部CSS和外部CSS

XML文件调用独立的CSS文件的方法是在XML文件中加入下面一条处理指令:

<?xml-stylesheet type=text/csshref=CSS文件的URI?>

调用内部的CSS通过名称空间的方法引入HTMLstyle标记:

    <persionsxmlns:HTML=http://www.w3.org/Profiles/XHTML-transitional>

    <HTML:style>

        CSS代码

    </HTML:style>

    XML文件中同时加入上面两段代码就是同时应用内部CSS和外部CSS

2.如果有一个标记“<name>”,想让标记中的内容显示为文本块,字体为楷体,大小是20磅,颜色为蓝色,背景是黄色。在CSS中应设置哪些属性,属性值如何设置?

答案:

    name{

        display:block;

        font-family:楷体;

        font-size:20pt;

        color:blue;

        background-color:yellow;

    }

5-17

4.为下面的XML文件添加CSS样式,使之显示的效果如图5-18所示。

 

    <?xmlversion="1.0" encoding="gb2312"?>

    <?xml-stylesheettype="text/css" href="xiti4.css" ?>

    <books>

    <book>

    <title>西游记</title>

    <pictureID="xiyou"></picture>

    <author>吴承恩</author>

    <price>32.00</price>

    <discretion>西游记以民间传说的唐僧取经的故事和有关话本及杂剧基础上创作而成。西游记前七回叙述孙悟空出世,有大闹天宫等故事。此后……

    </discretion>

    </book>

    <book>

    <title>红楼梦</title>

    <pictureID="honglou"></picture>

    <author>曹雪芹</author>

    <price>43.90</price>

    <discretion>红楼梦写于十八世纪中叶的清乾隆时代,内容以贾、王、史、薛四大家族为背景,以贾宝玉、林黛玉的爱情悲剧为主线,着重……

    </discretion>

    </book>

    </books>

 

 

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;

    }

 

1XSLCSS有哪些不同之处?

答案:

XSLCSS都可以格式化XML。它们之间主要有以下不同之处:

1CSS有局限性。CSS没有办法让XML文件中的同一个数据多次在页面上显示出来,而XSL却能做到这一点。这是因为它们的需找数据的机理是不同的,CSS技术的显示机理是从头到尾一次扫描XML文件,遇到匹配的标记,就以当前的样式显示。XSL则是通过路径的方式来定位数据,从而可以轻易地提取出特定的数据。

2CSS语法简单。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样式文件的最基本的结构应该如下代码所示:

 

    <?xmlversion="1.0" ?>

    <xsl:stylesheetversion="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">

    <xsl:templatemath="/">

    内容描述

    </xsl:template>

    </xsl:stylesheet>

1.什么是数据岛?为什么要引用数据岛?如何声明一个数据岛?

答案:

    数据岛是指存在于HTML页面中的XML代码,作为HTML页面数据的来源。

    通过数据岛这种技术,实现了页面范围内数据和显示的分离。可以提高数据的共享性,方便数据的维护;可以提高程序的扩展性和代码的重用性。

    声明数据岛通过标记<xml>实现,声明内部数据岛时,把XML代码段写在标记<xml>之间。声明外部数据岛时,通过标记<xml>src属性指明外部的XML文件。在声明数据岛时,需要通过标记<xml>id属性为数据岛命名,用于标识这个数据岛。

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文件代码如下:

 

    <?xmlversion="1.0" encoding="gb2312" ?>

    <numbers>

        <area>

            <country>中国</country><number>0086</number>

        </area>

        <area>

            <country>越南</country><number>0084</number>

        </area>

        <area>

            <country>朝鲜</country><number>00850</number>

        </area>

        <area>

            <country>日本</country><number>0081</number>

        </area>

        <area>

            <country>俄罗斯</country><number>007</number>

        </area>

        <area>

            <country>法国</country><number>0033</number>

        </area>

        <area>

            <country>英国</country><number>0044</number>

        </area>

        <area>

            <country>德国</country><number>00349</number>

        </area>

        <area>

            <country>美国</country><number>001</number>

        </area>

        <area>

            <country>智利</country><number>0056</number>

        </area>

        <area>

            <country>巴西</country><number>0055</number>

        </area>

        <area>

            <country>澳大利亚</country><number>0061</number>

        </area>

    </numbers>

答案:

    <html>

        <head>

            <title>习题5</title>

        </head>

        <body>

        <center>

        <h3>部分国家电话直拨区号表</h3>

        <divid="s_t"></div>

        <spanid="cpage"></span>/<span id="tpage"></span>&nbsp;&nbsp;

        转到第<inputtype="text" name="pagenum" size="3" />

        <inputtype="button" value="确定"οnclick="gotopage(pagenum.value);" /><br>

        <inputtype="button" value=" " οnclick="firstpage();" />

        <inputtype="button" value="上一页"οnclick="previouspage();" />

        <inputtype="button" value="下一页"οnclick="nextpage();" />

        <inputtype="button" value=" " οnclick="lastpage();" />

        <xmlid="students" src="xiti5.xml" />

        <scriptlanguage="javascript">

            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="<table><trbgcolor='#AAAAAA'>";

                stu_tab=stu_tab+"<thwidth='200' align='center'>国家名称</th>";

                stu_tab=stu_tab+"<thwidth='200' align='center'>直拨区号</th></tr>";

                for(i=1;i<=rs.pagesize;i++){

                if(i<=rs.pagesize&&!rs.EOF){

                stu_tab=stu_tab+"<trbgcolor='#EEEEEE'><tdalign='center'>"+rs(0)+"</td>";

                stu_tab=stu_tab+"<tdalign='center'>"+rs(1)+"</td></tr>";

                    if(i<rs.pagesize){

                        rs.moveNext();

                    }

                    }

            }

            stu_tab=stu_tab+"</table>";

            s_t.innerHTML=stu_tab;

            cpage.innerHTML=rs.absolutepage;

            tpage.innerHTML=rs.pagecount;

        }

        disp()

    </script>

    </body>

    </html>

 

DOM接口中的Document节点有哪两个子节点?分别代表什么意义?

答案:

Document类型节点的两个子节类型点是DocumentType类型和Element类型。

DocumentType类型节点对应XML文件所关联的DTD文件,通过DocumentType节点的子孙关系可以分析并获得XML文件所关联的DTD文件中的数据。

Element类型节点对应XML文件的标记节点,通过Element节点的子孙关系可以获得XML文件中的数据,Element节点的子节点有Element节点、Text节点和CDATASection节点。

2Attr节点是Element节点的子节点吗?

答案:

不是。

XML文件中,属性是标记信息的补充描述,不是标记的子标记。所以,在DOMAttr对象是包含在Element对象中的,不是Element节点的子节点。要获得Element节点的Attr节点需要Element节点调用getAttribute()方法,该方法返回一个NamedNodeMap对象,NamedNodeMap对象由节点组成,这些节点可以转换为Attr节点。

3.有如下XML代码段:

 

    <element>text</element>

 

    可以通过哪些方法获得标记<element>中的数据“text”?

    答案:

    第一种方法:获得Element节点“element”,通过Node接口的getTextContent()方法获得“element”节点的文本数据。

    第二种方法:获得Element节点“element”的子节点,即Text类型节点,通过Text节点的getWholeText()方法获得文本数据。

4.编写Java程序,解析如下的XML文件,要求输出的结果如图8-12所示。

 

    <?xml version=1.0 encoding=gb2312?>

    <score>

        <name>

    小李

            <math>89</math>

            <english>90</english>

            </name>

        <name>

            小张

            <math>92</math>

            <english>87</english>

        </name>

        <name>

            小赵

            <math>95</math>

            <english>90</english>

        </name>

    </score>

 

 

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

                }

            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值