XML程序设计习题解答耿祥义张跃平 编著_第1页
XML程序设计习题解答耿祥义张跃平 编著_第2页
XML程序设计习题解答耿祥义张跃平 编著_第3页
XML程序设计习题解答耿祥义张跃平 编著_第4页
XML程序设计习题解答耿祥义张跃平 编著_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、XML程序设计 课后习题习题一 1答:HTML是用来编写Web页的语言、不允许用户自定义标记,HTML体现数据的显示格式。XML描述数据的组织结构、可自定义标记,其标记名称是对标记所包含的数据内容含义的抽象,而不是数据的显示格式。2答:使用UTF-8保存5 答:(1)不可以,(2)可以,(3)不可以6答:Show.css:time display:block;font-size:18pt;font-weight:boldhour display:line;font-size:16pt;font-style:italicmimute display:line;font-size:9pt;font

2、-weight:bold习题二1答:(1)使用ANSI编码。(2)可以。(3)不合理。2答:不相同。3答:(1)和(2)。4答:A3.xml。5答:“root”标记包含的文本内容都是空白字符。 “a1”标记包含的文本内容:<CCTV5>。“a2”标记包含的文本内容: 子曰"有朋自远方来,不亦乐乎"。6答:解析器不对CDATA段的内容做分析处理,CDATA段中的内容可以包含任意的字符。(1)和(5)是正确的CDATA段。(2)不正确,原因是CDATA段的开始标识中有回行,(3)不正确,原因是:CDATA段的结束标识不正确,(4)不正确,原因是CDATA段中嵌套了另

3、一个CDATA段。7答: <p1:开关> 我也是中国制造的 </p1:开关>是错误的,因为p1的有效范围是在“电视机”标记中。8答:标记:" root "未隶属任何名称空间标记:" 电视机 "隶书的名称空间:www.C标记:" 显示器 "隶书的名称空间:www.C标记:" 开关 "隶书的名称空间:www.G标记:" 电线 "隶书的名称空间:www.E习题三1答:一个规范的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的约束条件,就称之为有效的XML文件。2答

4、:DTD文件的编码必须和其约束的XML文件的编码相一致。3答:无关。4答:(1) 使用SYSTEM文档类型声明的格式:<DOCTYPE 根标记的名称 SYSTEM "DTD文件的URI">(2) 使用PUBLIC文档类型声明的格式:<!DOCTYPE 根标记的名称 PUBLIC "正式公用标识符" "DTD文件的URI">5答:一定。6答:(1)约束标记“张三”必须有“学号”属性 (2)约束标记“张三”必须有“学号”属性,而且学号的属性值是固定的220123。 (3)约束标记“张三”可以有也可以没有“学号”属性

5、。7答:ID类型的属性的属性值具有互斥性,即所有ID类型的属性的属性值必须互不相同。8答:不合理。9答:(1)、(3)和(4)。10答,B.xml不是有效的。将B.xml修改为有效:B.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 成绩单 SYSTEM "A.dtd"><成绩单> <学生> <姓名> 张三 </姓名> <成绩> 优秀 </成绩> </学生> <学生&

6、gt; <姓名> 李四 </姓名> <成绩> 良好 </成绩> </学生></成绩单>11答: Goods.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 商品信息 SYSTEM "dtdFile.dtd"><商品信息> <商品 商标=“Lenovo”> <p:名称 xmlns:p=“ookk” 条形码=“1298-24”> 联想电脑 </p:

7、名称> <价钱>1234</价钱> <连锁店> <q:名称 xmlns:q="Beijing" > 中关村专卖店</q名称> <地点> 北京市 </地点> </连锁店> </商品></商品信息>习题四1答:使用操作指令:<?xml-stylesheet href ="样式表的URI" type= "text/css" ?>2答:student display:block;font-size:18pt

8、; 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:10

9、pt;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答:必须有主模板吗。主要体现在该模板中的ma

10、tch属性的值是“/”:<xsl:template match="/"> 主模板的内容</xsl:template>3答:student的孙标记。4答:<HTML><table border="1"> <tr> <th> <台灯 /></th> <td>234元</td> <td>北京</td> </tr> <tr> <th> <壁灯 /></th> &

11、lt;td>56元</td> <td>上海</td> </tr></table></HTML>5答:<HTML><table border="1"> <tr> <td> <张三 /></td> <td>获得一等奖学金</td> <td>25岁</td> </tr></table></HTML>习题六1.答:一个返回子孙节点,而另一个只返回子节点

12、:(1)getElementsByTagName(String name):返回一个NodeList对象,该对象由当前节点的Element类型子孙节点组成,这些子孙节点的名字由参数name指定(2)getChildNodes():节点调用该方法返回一个由当前节点的所有子节点组成的NodeList对象。2答:分别是DocumentType类型和Element类型。3答:Element类型?4答:不可以。5答:JAXPXiti5.javaimport org.w3c.dom.*; import javax.xml.parsers.*;import java.io.*;public class JA

13、XPXiti5 public static void main(String args) OutResult outContent=new OutResult(); try DocumentBuilderFactory factory= DocumentBuilderFactory. newInstance(); DocumentBuilder builder= factory. newDocumentBuilder(); Document document= builder. parse(new File("a.xml") ; Element root=document.

14、getDocumentElement() ; String rootName=root.getNodeName(); NodeList nodeList=root.getChildNodes(); outContent.output(nodeList); System.out.println("数学平均成绩"+outContent.mathAver); System.out.println("物理平均成绩"+outContent.physicsAver); catch(Exception e) System.out.println(e); class O

15、utResult double sumAllMath,sumAllPhysics,mathAver,physicsAver; int mathNumber=0, physicsNumber=0; public void output(NodeList nodeList) int size=nodeList.getLength(); for(int k=0;k<size;k+) Node node=nodeList.item(k); if(node.getNodeType()=Node.TEXT_NODE) Text textNode=(Text)node; String content=

16、textNode.getWholeText(); System.out.print(content); Element parent=(Element)textNode.getParentNode(); if(parent.getNodeName().equals("数学") mathNumber+; sumAllMath=sumAllMath+Double.parseDouble(content.trim(); if(parent.getNodeName().equals("物理") physicsNumber+; sumAllPhysics=sumA

17、llPhysics+Double.parseDouble(content.trim(); if(node.getNodeType()=Node.ELEMENT_NODE) Element elementNode=(Element)node; String name=elementNode.getNodeName(); System.out.print(name); NodeList nodes=elementNode.getChildNodes(); output(nodes); mathAver=sumAllMath/mathNumber; physicsAver=sumAllPhysics

18、/physicsNumber; 6答:JAXPXiti6.javaimport javax.xml.transform.*;import javax.xml.transform.stream.*;import javax.xml.transform.dom.*;import org.w3c.dom.*; import javax.xml.parsers.*;import java.io.*;public class JAXPXiti6 public static void main(String args) try String 车次="T21","K456&qu

19、ot;,"T89" String 区间="北京-上海","长沙-北京","天津-重庆" DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder domPaser=factory.newDocumentBuilder(); Document document=domPaser.newDocument(); document.setXmlVersion("1.0"); Element r

20、oot=document.createElement("列车表"); document.appendChild(root); for(int k=1;k<=车次.length;k+) Node node=document.createElement("客车"); root.appendChild(node); NodeList nodeList=document.getElementsByTagName("客车"); int size=nodeList.getLength(); for(int k=0;k<size;k+)

21、 Node node=nodeList.item(k); if(node.getNodeType()=Node.ELEMENT_NODE) Element elementNode=(Element)node; Node nodeName=document.createElement("车次"); Node nodeNumber=document.createElement("运行区间"); nodeName.appendChild(document.createTextNode(车次k); nodeNumber.appendChild(document.

22、createTextNode(区间k); elementNode.appendChild(nodeName); elementNode.appendChild(nodeNumber); TransformerFactory transFactory=TransformerFactory.newInstance(); Transformer transformer=transFactory.newTransformer(); DOMSource domSource=new DOMSource(document); File file=new File("列车表.xml");

23、FileOutputStream out=new FileOutputStream(file); StreamResult xmlResult=new StreamResult(out); transformer.transform(domSource, xmlResult); out.close(); catch(Exception e) System.out.println(e); 习题七1答:DOM解析器的核心是在内存中建立和XML文件相对应的树形结构数据,如果XML文件较大,相应的Document对象就要占用较多的内存空间;SAX解析器不在内存中建立和XML文件相对应的树形结构数据,和

24、DOM解析器相比,SAX解析器占有的内存少。2答:参见例子1的表7.1。3答:不报告。4答:uri和localName的取值是空字符组成的串,即uri="",localName="",参数qName取值是标记名称,atts是标记的所有属性的集合。5答:当忽略标记之间形成的空白区域时。6答:是“文件定位器”事件。7答:Xiti7.javaimport org.w3c.dom.*; import javax.xml.parsers.*;import java.io.*;public class Xiti7 public static void main(St

25、ring args) OutTotal outWeight=new OutTotal(); try DocumentBuilderFactory factory=DocumentBuilderFactory. newInstance(); DocumentBuilder builder= factory. newDocumentBuilder(); Document document= builder.parse(new File("a.xml") ; Element root=document.getDocumentElement() ; NodeList nodeLis

26、t=root.getChildNodes(); outWeight.output(nodeList); System.out.println("总重量:"+outWeight.sum); catch(Exception e) System.out.println(e); class OutTotal double sum; public void output(NodeList nodeList) int size=nodeList.getLength(); for(int k=0;k<size;k+) Node node=nodeList.item(k); if(n

27、ode.getNodeType()=Node.TEXT_NODE) Text textNode=(Text)node; String content=textNode.getWholeText(); System.out.print(content); Element parent=(Element)textNode.getParentNode(); if(parent.getNodeName().equals("重量") sum=sum+Double.parseDouble(content.trim(); if(node.getNodeType()=Node.ELEMEN

28、T_NODE) Element elementNode=(Element)node; String name=elementNode.getNodeName(); System.out.print(name); NodeList nodes=elementNode.getChildNodes(); output(nodes); 习题八1答:Node节点由可细分为Document,Element,Text,Attribue,ProcessingInstruction和Namespace节点。2答:ProcessingInstruction和Element子节点。3答:Element类型节点对应X

29、ML中的标记。4答:可以。5答:一个XPath路径表达式由若干个“定位步”构成。6答:假设XPath绝对路径经过第n个定位步后寻找出的第n个节点集中包含有m个节点,这m个节点按着他们在XML文件对应的顺序进行排列,序号从1开始,然后这m个节点依次使用第n+1个定位步寻找节点,它们找出的全部节点就是XPath绝对路径经过第n+1个定位步后寻找出的第n+1个节点集,依次类推,XPath绝对路径经过最后一个定位步寻找出的节点集就是XPapth绝对路径寻找出的节点集。5答:谓词的目的是给出定位步所寻找出的节点需满足的进一步条件,即当前节点在使用定位步的轴和节点测试找出若干个节点后,再使用谓词从这些节点

30、中筛选出满足谓词条件的节点。6答:(1)按顺序对应着第一个名字是“教室”的标记中的第一个名字是“桌子”标记的“价格”标记。(2) 对应着具有属性number,属性值是02、名字为“桌子”的标记,而且这些桌子标记有子标记“价格”,而且价格包含的文本是数字且值大于等于360。(3)对应“教室”的属性。(4)number属性所在的“教室”节点。(5)109(6)396,267(7)对应着“教室”标记,具教室标记有孙标记“价格”,且“价格”标记含有的数字文本的值大于390,即是第2个“教室”标记。(8)对应着价格标记,且“价格”标记含有的数字文本的值大于396。7答:(1) 【结果1】: A1001定

31、单的总额:(2) 【结果2】: 40.0(3) 【结果3】: 4(4) 【结果4】:1008答:Xiti8.javaimport javax.xml.xpath.*;import org.xml.sax.*;import org.w3c.dom.*; public class Xiti8 public static void main(String args) try XPathFactory xPathFactory=XPathFactory.newInstance(); XPath xPath=xPathFactory.newXPath(); InputSource source=new

32、InputSource("Xiti8.xml"); String countPath="count(/货品列表/货品/重量)" String sumPath="sum(/货品列表/货品/重量)" Double sum=(Double)xPath.evaluate(sumPath,source,XPathConstants.NUMBER); double total=sum.doubleValue(); System.out.println("总重量:"+total); catch(Exception exp) Sy

33、stem.out.println(exp); 9答:Student.xml<?xml version="1.0" encoding="UTF-8" ?><学生列表> <学生 学号='72349876'> <姓名>张三</姓名> <性别> 男 </性别> <年龄> 29 </年龄> </学生> <学生 学号='12345678'> <姓名>李张林</姓名> <性别&

34、gt; 男 </性别> <年龄> 18 </年龄> </学生> <学生 学号='000'> <姓名>张李号</姓名> <性别> 女 </性别> <年龄> 25 </年龄> </学生></学生列表>Aplication.javapublic class Application public static void main(String args) new StudentConditionWindow(); StudentCo

35、nditionWindow.javaimport java.awt.*;import javax.swing.*;public class StudentConditionWindow extends JFrame JTextField inputName,inputNumber; JTextArea showResult; JButton button; Box baseBox ,boxV1,boxV2; StudentConditionWindow() inputName=new JTextField(10); inputNumber=new JTextField(10); boxV1=B

36、ox.createVerticalBox(); boxV1.add(new Label("姓名中包含:"); boxV1.add(new Label("学号中包含"); boxV2=Box.createVerticalBox(); boxV2.add(inputName); boxV2.add(inputNumber); baseBox=Box.createHorizontalBox(); baseBox.add(boxV1); baseBox.add(boxV2); JPanel west=new JPanel(); west.add(baseBox)

37、; button=new JButton("确定"); west.add(button); add(west,BorderLayout.WEST); showResult=new JTextArea(10,10); showResult.setFont(new Font("宋体",Font.PLAIN,12); add(new JScrollPane(showResult),BorderLayout.CENTER); FindStudentByXPath findStudent; /负责使用XPath查询学生的对象 findStudent= new Fi

38、ndStudentByXPath(inputName,inputNumber,showResult,"student.xml"); button.addActionListener(findStudent); setBounds(10,10,900,300); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); FindStudentByXPath.javaimport javax.xml.xpath.*;import org.w3c.dom.*; import javax.swing.*;im

39、port java.awt.event.*;import org.xml.sax.*;public class FindStudentByXPath implements ActionListener XPathFactory xPathFactory; XPath xPath; String positionPath; InputSource source; JTextField inputName,inputNumber; JTextArea showResult; FindStudentByXPath(JTextField inputName,JTextField inputNumber

40、,JTextArea showResult,String fileName) this.inputName=inputName; this.inputNumber=inputNumber; this.showResult=showResult; xPathFactory=XPathFactory.newInstance(); xPath=xPathFactory.newXPath(); source=new InputSource(fileName); this.positionPath=positionPath; public void actionPerformed(ActionEvent

41、 e) showResult.setText(null); String studentName=inputName.getText().trim(); String studentNumber=inputNumber.getText().trim(); String predicates="contains(姓名,'"+studentName+"') and "+ "contains(学号,'"+studentNumber+"')" String path="/学生列表/

42、学生"+predicates+"/*" /XPath路径表达式 try NodeList nodelist= (NodeList)xPath.evaluate(path,source,XPathConstants.NODESET); int size=nodelist.getLength(); for(int k=0;k<size;k+) Node node=nodelist.item(k); String name=node.getNodeName(); showResult.append(" "+name+":"); String content=node.getTextContent(); showResult.append(content+"n"); if(name.starts

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论