XML程序设计习题解答.docx
《XML程序设计习题解答.docx》由会员分享,可在线阅读,更多相关《XML程序设计习题解答.docx(23页珍藏版)》请在冰豆网上搜索。
XML程序设计习题解答
习题一
1.答:
HTML是用来编写Web页的语言、不允许用户自定义标记,HTML体现数据的显示格式。
XML描述数据的组织结构、可自定义标记,其标记名称是对标记所包含的数据内容含义的抽象,而不是数据的显示格式。
2.答:
使用UTF-8保存5.答:
(1)不可以,
(2)可以,(3)不可以6.答:
Show.css:
time
{display:
block;font-size:
18pt;font-weight:
bold
}
hour
{display:
line;font-size:
16pt;font-style:
italic
}
mimute
{display:
line;font-size:
9pt;font-weight:
bold
}
习题二1.答:
(1)使用ANSI编码。
(2)可以。
(3)不合理。
2.答:
不相同。
3.答:
(1)和
(2)。
4.答:
A3.xml。
5.答:
“root”标记包含的文本内容都是空白字符。
“a1”标记包含的文本内容:
。
“a2”标记包含的文本内容:
子曰"有朋自远方来,不亦乐乎"。
6.答:
解析器不对CDATA段的内容做分析处理,CDATA段中的内容可以包含任意的字符。
(1)和(5)是正确的CDATA段。
(2)不正确,原因是CDATA段的开始标识中有回行,(3)不正确,原因是:
CDATA段的结束标识不正确,(4)不正确,原因是CDATA段中嵌套了另一个CDATA段。
7.答:
开关>我也是中国制造的
开关>
是错误的,因为p1的有效范围是在“电视机”标记中。
8.答:
标记:
"root"未隶属任何名称空间
标记:
"电视机"隶书的名称空间:
www.C
标记:
"显示器"隶书的名称空间:
www.C
标记:
"开关"隶书的名称空间:
www.G
标记:
"电线"隶书的名称空间:
www.E
习题三1.答:
一个规范的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的约束条件,就称之为有效的XML文件。
2.答:
DTD文件的编码必须和其约束的XML文件的编码相一致。
3.答:
无关。
4.答:
(1)使用SYSTEM文档类型声明的格式:
(2)使用PUBLIC文档类型声明的格式:
DOCTYPE根标记的名称PUBLIC"正式公用标识符""DTD文件的URI">
5.答:
一定。
6.答:
(1)约束标记“张三”必须有“学号”属性
(2)约束标记“张三”必须有“学号”属性,而且学号的属性值是固定的220123。
(3)约束标记“张三”可以有也可以没有“学号”属性。
7.答:
ID类型的属性的属性值具有互斥性,即所有ID类型的属性的属性值必须互不相同。
8.答:
不合理。
9.答:
(1)、(3)和(4)。
10.答,B.xml不是有效的。
将B.xml修改为有效:
B.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPE成绩单SYSTEM"A.dtd">
<成绩单>
<学生>
<姓名>张三姓名>
<成绩>优秀成绩>
学生>
<学生>
<姓名>李四姓名>
<成绩>良好成绩>
学生>
成绩单>
11.答:
Goods.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPE商品信息SYSTEM"dtdFile.dtd">
<商品信息>
<商品商标=“Lenovo”>
名称xmlns:
p=“ookk”条形码=“1298-24”>
联想电脑
名称>
<价钱>1234价钱>
<连锁店>
名称xmlns:
q="Beijing">
中关村专卖店
<地点>北京市地点>
连锁店>
商品>
商品信息>
习题四1.答:
使用操作指令:
xml-stylesheethref="样式表的URI"type="text/css"?
>
2.答:
student
{display:
block;font-size:
18pt;color:
red;
}
3.答:
假设XML文件中有三个标记的名称都是“name”,“ID”属性分别是a001,a002,a003。
CSS文件如下:
namea001
{display:
block;
border-style:
double;
width=260;
height=120
}
namea002
{display:
block;
border-style:
dotted;
width=150;
height=60;
font-size:
10pt;
}
namea003
{display:
block;
border-style:
ridge;
width=90;
height=30;
font-size:
10pt;
}
4.答:
修改XML文件。
5.答:
math
{display:
block;
font-size:
12pt;
font-style:
italic;
background-color:
rgb(227,228,229);
}
chemistry
{display:
block;
font-size:
12pt;
text-decoration:
underline;
background-color:
cyan;
}
low
{display:
line;
font-size:
8pt;
vertical-align:
bottom;
}
习题五1.答:
由若干个模板所构成,但必须有一个主模板。
2.答:
必须有主模板吗。
主要体现在该模板中的match属性的值是“/”:
templatematch="/">
主模板的内容
template>
3.答:
student的孙标记。
4.答:
<台灯/> | 234元 | 北京 |
---|
<壁灯/> | 56元 | 上海 |
---|
5.答:
<张三/> | 获得一等奖学金 | 25岁 |
习题六1.答:
一个返回子孙节点,而另一个只返回子节点:
(1)getElementsByTagName(Stringname):
返回一个NodeList对象,该对象由当前节点的Element类型子孙节点组成,这些子孙节点的名字由参数name指定
(2)getChildNodes():
节点调用该方法返回一个由当前节点的所有子节点组成的NodeList对象。
2.答:
分别是DocumentType类型和Element类型。
3.答:
Element类型?
4.答:
不可以。
5.答:
JAXPXiti5.java
importorg.w3c.dom.*;
importjavax.xml.parsers.*;
importjava.io.*;
publicclassJAXPXiti5
{
publicstaticvoidmain(Stringargs[])
{
OutResultoutContent=newOutResult();
try{
DocumentBuilderFactoryfactory=
DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder=factory.newDocumentBuilder();
Documentdocument=builder.parse(newFile("a.xml"));
Elementroot=document.getDocumentElement();
StringrootName=root.getNodeName();
NodeListnodeList=root.getChildNodes();
outContent.output(nodeList);
System.out.println("数学平均成绩"+outContent.mathAver);
System.out.println("物理平均成绩"+outContent.physicsAver);
}
catch(Exceptione)
{
System.out.println(e);
}
}
}
classOutResult
{
doublesumAllMath,sumAllPhysics,mathAver,physicsAver;
intmathNumber=0,physicsNumber=0;
publicvoidoutput(NodeListnodeList)
{
intsize=nodeList.getLength();
for(intk=0;k{
Nodenode=nodeList.item(k);
if(node.getNodeType()==Node.TEXT_NODE)
{
TexttextNode=(Text)node;
Stringcontent=textNode.getWholeText();
System.out.print(content);
Elementparent=(Element)textNode.getParentNode();
if(parent.getNodeName().equals("数学"))
{
mathNumber++;
sumAllMath=sumAllMath+Double.parseDouble(content.trim());
}
if(parent.getNodeName().equals("物理"))
{
physicsNumber++;
sumAllPhysics=sumAllPhysics+Double.parseDouble(content.trim());
}
}
if(node.getNodeType()==Node.ELEMENT_NODE)
{
ElementelementNode=(Element)node;
Stringname=elementNode.getNodeName();
System.out.print(name);
NodeListnodes=elementNode.getChildNodes();
output(nodes);
}
}
mathAver=sumAllMath/mathNumber;
physicsAver=sumAllPhysics/physicsNumber;
}
}
6.答:
JAXPXiti6.java
importjavax.xml.transform.*;
importjavax.xml.transform.stream.*;
importjavax.xml.transform.dom.*;
importorg.w3c.dom.*;
importjavax.xml.parsers.*;
importjava.io.*;
publicclassJAXPXiti6{
publicstaticvoidmain(Stringargs[]){
try{String[]车次={"T21","K456","T89"};
String[]区间={"北京-上海","长沙-北京","天津-重庆"};
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
DocumentBuilderdomPaser=factory.newDocumentBuilder();
Documentdocument=domPaser.newDocument();
document.setXmlVersion("1.0");
Elementroot=document.createElement("列车表");
document.appendChild(root);
for(intk=1;k<=车次.length;k++){
Nodenode=document.createElement("客车");
root.appendChild(node);
}
NodeListnodeList=document.getElementsByTagName("客车");
intsize=nodeList.getLength();
for(intk=0;kNodenode=nodeList.item(k);
if(node.getNodeType()==Node.ELEMENT_NODE){
ElementelementNode=(Element)node;
NodenodeName=document.createElement("车次");
NodenodeNumber=document.createElement("运行区间");
nodeName.appendChild(document.createTextNode(车次[k]));
nodeNumber.appendChild(document.createTextNode(区间[k]));
elementNode.appendChild(nodeName);
elementNode.appendChild(nodeNumber);
}
}
TransformerFactorytransFactory=TransformerFactory.newInstance();
Transformertransformer=transFactory.newTransformer();
DOMSourcedomSource=newDOMSource(document);
Filefile=newFile("列车表.xml");
FileOutputStreamout=newFileOutputStream(file);
StreamResultxmlResult=newStreamResult(out);
transformer.transform(domSource,xmlResult);
out.close();
}
catch(Exceptione){
System.out.println(e);
}
}
}
习题七1.答:
DOM解析器的核心是在内存中建立和XML文件相对应的树形结构数据,如果XML文件较大,相应的Document对象就要占用较多的内存空间;SAX解析器不在内存中建立和XML文件相对应的树形结构数据,和DOM解析器相比,SAX解析器占有的内存少。
2.答:
参见例子1的表7.1。
3.答:
不报告。
4.答:
uri和localName的取值是空字符组成的串,即uri="",localName="",参数qName取值是标记名称,atts是标记的所有属性的集合。
5.答:
当忽略标记之间形成的空白区域时。
6.答:
是“文件定位器”事件。
7.答:
Xiti7.java
importorg.w3c.dom.*;
importjavax.xml.parsers.*;
importjava.io.*;
publicclassXiti7
{
publicstaticvoidmain(Stringargs[])
{
OutTotaloutWeight=newOutTotal();
try{
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder=factory.newDocumentBuilder();
Documentdocument=builder.parse(newFile("a.xml"));
Elementroot=document.getDocumentElement();
NodeListnodeList=root.getChildNodes();
outWeight.output(nodeList);
System.out.println("总重量:
"+outWeight.sum);
}
catch(Exceptione){
System.out.println(e);
}
}
}
classOutTotal
{
doublesum;
publicvoidoutput(NodeListnodeList)
{
intsize=nodeList.getLength();
for(intk=0;k{
Nodenode=nodeList.item(k);
if(node.getNodeType()==Node.TEXT_NODE)
{
TexttextNode=(Text)node;
Stringcontent=textNode.getWholeText();
System.out.print(content);
Elementparent=(Element)textNode.getParentNode();
if(parent.getNodeName().equals("重量"))
sum=sum+Double.parseDouble(content.trim());}
if(node.getNodeType()==Node.ELEMENT_NODE)
{
ElementelementNode=(Element)node;
Stringname=elementNode.getNodeName();
System.out.print(name);
NodeListnodes=elementNode.getChildNodes();
output(nodes);
}
}
}
}
习题八1.答:
Node节点由可细分为Document,Element,Text,Attribue,ProcessingInstruction和Namespace节点。
2.答:
ProcessingInstruction和Element子节点。
3.答:
Element类型节点对应XML中的标记。
4.答:
可以。
5.答:
一个XPath路径表达式由若干个“定位步”构成。
6.答:
假设XPath绝对路径经过第n个定位步后寻找出的第n个节点集中包含有m个节点,这m个节点按着他们在XML文件对应的顺序进行排列,序号从1开始,然后这m个节点依次使用第n+1个定位步寻找节点,它们找出的全部节点就是XPath绝对路径经过第n+1个定位步后寻找出的第n+1个节点集,依次类推,XPath绝对路径经过最后一个定位步寻找出的节点集就是XPapth绝对路径寻找出的节点集。
5.答:
谓词的目的是给出定位步所寻找出的节点需满足的进一步条件,即当前节点在使用定位步的轴和节点测试找出若干个节点后,再使用谓词从这些节点中筛选出满足谓词条件的节点。
6.答:
(1)按顺序对应着第一个名字是“教室”的标记中的第一个名字是“桌子”标记的“价格”标记。
(2)对应着具有属性number,属性值是02、名字为“桌子”的标记,而且这些桌子标记有子标记“价格”,而且价格包含的文本是数字且值大于等于360。
(3)对应“教室”的属性。
(4)number属性所在的“教室”节点。
(5)109
(6)396,267
(7)对应着“教室”标记,具教室标记有孙标记“价格”,且“价格”标记含有的数字文本的值大于390,即是第2个“教室”标记。
(8)对应着价格标记,且“价格”标记含有的数字文本的值大于396。
7.答:
(1)【结果1】:
A1001定单的总额:
(2)【结果2】:
40.0
(3)【结果3】:
4
(4)【结果4】:
100
8.答:
Xiti8.java
importjavax.xml.xpath.*;
importorg.xml.sax.*;
importorg.w3c.dom.*;
publicclassXiti8{
publicstaticvoidmain(Stringargs[]){
try{XPathFactoryxPathFactory=XPathFactory.newInstance();
XPathxPath=xPathFactory.newXPath();
InputSourcesource=newInputSource("Xiti8.xml");
StringcountPath="count(/货品列表/货品/重量)";
StringsumPath="sum(/货品列表/货品/重量)";
Doublesum=(Double)xPath.evaluate(sumPath,source,XPathConstants.NUMBER);
doubletotal=sum.doubleValue();
System.out.println("总重量:
"+total);
}
catch(Exceptionexp){
System.out.println(exp);
}
}
}
9.答:
Student.xml
xmlversion="1.0"encoding="UTF-8"?
>
<学生列表>
<学生学号='72349876'>
<姓名>张三姓名>
<性别>男性别>
<年龄>29年龄>
学生>
<学生学号='12345678'>
<姓名>李张林姓名>
<性别>男性别>
<年龄>18年龄>
学生>
<学生学号='000'>
<姓名>张李号姓名>
<性别>女性别>
<年龄>25年龄>