ImageVerifierCode 换一换
你正在下载:

XML.docx

[预览]
格式:DOCX , 页数:15 ,大小:128.74KB ,
资源ID:4543417      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4543417.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(XML.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

XML.docx

1、XML学习XML的目的: 根据DTD或Schema文件根据需求写出相应的XML文档 解析XML(JDOM,DOM4J) 用程序动态生成简单的XML文档XMLExtensible Markup Language 可扩展标记语言XML家族谱XML语法:XML命名规则:* 名称可以含字母、数字以及其他字符, 但是避免使用., :字符* 名称不能以数字或者标点符号开始* 名称不能以字符xml(或者XML、Xml)开始* 名称不能包含空格验证一个XML文档是否正确 格式正确 编程验证 XML Parser (eg. IE, FireFox) XML Editor (eg. Eclipse,XMLSpy)

2、 与DTD / Schema 文档相符 编程检查 XML Parser XML Editor编程验证XML文档是否正确在IE5以上的浏览器中内置了一个XML的解析工具: Microsoft.XMLDOM, 咱们可以通过编写很简单的JavaScrip代码就可以进行编程验证了, 步骤如下: 创建XML文档解析器对象var xmldoc = new ActiveXObject(Microsoft.XMLDOM); 在解析器解析XML文档的时候开启验证xmldoc.validateOnParse = true; 装载XML文档xmldoc.load(students.xml); 获取XML错误信息并且

3、打印出来document.write(错误信息: + xmldoc.parseError.reason + ); document.write(错误行号: + xmldoc.parseError.line + ); DTD (Document Type Definition,文档类型定义)作用:用来定义(约束)XML文档的合法构建模块,它使用一系列的合法元素来定义文档结构。(Schema)DTD语法 + 表示至少有一个, 必须按照定义的顺序来写XML* 零个或多个? 最多一个(零个或一个)() 作为一个组合| 在列出的集合元素中,只要选择一个就可以在XML中引入DTD文件例如在HTML文件DT

4、D文档声明和引用 内部DTD文档!DOCTYPE students 外部DTD文档 内外部DTD文档混合引用!DOCTYPE students SYSTEM “students.dtd” SYSTEM 表示本地 DTD文档PUBLIC 公共的DTD文档, 跟 URL地址DTD ELEMENT语法 (元素语法) EMPTY 空元素, 不能包含子元素, 但是可以有属性 ANY 可以包含任何字符数据,如果要有子元素, 只能用DTD里面定义过的元素 #PCDATA 可以包含任何字符数据, 但是不能包含任何子元素 其他类型, 比如集合,例如 DTD ATTLIST 语法 (属性语法)Attribute

5、Type: CDATA 可以放文本 ID 表示属性的值不能重复, 同时不要以数字开头 IDREF / IDREFS (ID references) 表示该属性的值需要去参照另外一个类型为ID的属性值(相当于数据库里的外键关联), 关联一个用IDREF, 如果要关联多个则用IDREFS多个属性值要用空格隔开例如: ENUMERATED 枚举 ENTITY / ENTITYS 实体实体就是用于为一段内容创建的一个别名, 相当于编程语言里面的常量, 但是比常量的功能要强一些, 目的在于便于重用 其他不常用的类型参见W3scholl.chm手册, 自己下去测试Attribute Description

6、 #REQUIRED 必须有 #IMPLIED 可以有 #FIXED value 如果有, 值必须是value default value 如果不指定属性值, 给定默认值, 默认值:valueENTITY / ENTITYS 实体 引用实体主要用在XML文档中(例如内置实体的调用: > <) 语法格式(DTD中定义) 引用方式(在XML中调用)©right; 参数实体主要被DTD文件自己使用 语法格式 引用方式% entity_name; 参数实体举例:例一:例二:DTD的实际操作学习DTD的目标:一般公司很少让程序员自己写DTD, 要求程序员看得懂DTD, 同时可以根据给

7、定的DTD写出对应的XML作业: 根据W3school.chm手册DTD实例产品目录DTD写一个正确规范的XML文档 根据手册自学Schema, 尝试使用Schema把上述产品目录DTD改成SchemaDOM(Document Object Model)XML解析 解析方式 DOM解析直接性把XML文档全部读取到内存中来, 会得到一个Doucument对象, 然后对其访问操作, DOM方式W3C推荐的一种方式. SAX解析Simple API for XML, 不是官方的标准, 但他是XML领域事实上的标准SAX是边读取XML文档, 边解析 XML的解析器 Crimson(SUN) Xerce

8、s(IBM-Apache) Aelfred(JDOM, DOM4J)第三方的解析工具JDOM, DOM4JJavaAPI里面对XML的解析工具JAXP(Java Api For Xml Processing)涉及包: javax.xml, org.w3c.dom, org.xml.saxJAXP方式解析XML步骤(DOM方式) 获取DocumentBuilderFactory实例DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 通过Factory获取DocumentBuilder解析器对象实例DocumentB

9、uilder db = dbf.newDocumentBuilder(); 加载要解析的XML文档,获取Document对象Document doc = db.parse(new FileInputStream(xmlfile/students.xml); 对Document对象进行操作动态生成XML文档, 并写入文件 创建Document实例 获取DocumentBuilderFactory实例DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 通过Factory获取DocumentBuilder解析器对象实例

10、DocumentBuilder db = dbf.newDocumentBuilder(); 创建一个新的Document对象Document doc = db.newDocument(); 添加一系列的元素Element rootElt = doc.createElement(班级); Element studentElt1 = doc.createElement(学生); Element studentElt1_name = doc.createElement(姓名); studentElt1_name.setTextContent(张曼玉); studentElt1_name.setAt

11、tribute(别名, 玉姐); Element studentElt1_sex = doc.createElement(性别); studentElt1_sex.setTextContent(女); studentElt1.appendChild(studentElt1_name); studentElt1.appendChild(studentElt1_sex); Element studentElt2 = doc.createElement(学生); Element studentElt2_name = doc.createElement(姓名); studentElt2_name.se

12、tTextContent(林青霞); studentElt2_name.setAttribute(别名, 霞妹); Element studentElt2_sex = doc.createElement(性别); studentElt2_sex.setTextContent(女); studentElt2.appendChild(studentElt2_name); studentElt2.appendChild(studentElt2_sex); rootElt.appendChild(studentElt1); rootElt.appendChild(studentElt2); doc.a

13、ppendChild(rootElt); 获取TransfomerFactory实例TransformerFactory tff = TransformerFactory.newInstance(); 通过TransfomerFactory创建Transformer实例Transformer tf = tff.newTransformer(); 通过Document生成DOMSource实例DOMSource sourse = new DOMSource(doc); 创建写DOM文档的输出流StreamResult xmlResult = new StreamResult(new FileOu

14、tputStream(test.xml); 通过Transfomer的transform方法把DOMSource对象写入输出流tf.transform(sourse, xmlResult);JAXP方式解析XML步骤(SAX方式)SAX解析XML步骤1) SAXPerserFactory spf = SAXPerserFactory.newInstance();2) SAXParser sp = spf.newSAXParser();3) sp.parse(“test.xml”, new MyHandler();SAX主要用于对XML文档解析, 不能去修改, 删除, 添加元素SAX是推行机制,

15、 把发现的内容告诉程序员(函数), 程序员可以自己决定如何处理DefaultHandler SAX事件 startDoucment()发现文档的开始, 解析器开始扫描文档 endDocument()发现了文档尾() startElement()发现了一个起始标签, 返回元素名, 以及所有属性名和值 character()发现了一些文本, 将得到一个字符数组, 该数字符数组的偏移量和长度变量, 有这三个变量可以得到解析器发现的文本 endElement()发现一个结束标签, 并返回元素名称DOM模型(Document Object Model)Parent, Children, Siblingd

16、escendant, ancestorJDOM解析XML文档(第三方, 非JavaSE官方发布的内容)JDOM www.jdom.org解析步骤: 创建JDOM XML文档解析器对象SAXBuilderSAXBuilder builder = new SAXBuilder(); 通过输入流或文件对象(File)加载XML文档, 并可得到Document对象(org.jdom.Document;)Document doc = builder.build(Thread.currentThread().getContextClassLoader().getResourceAsStream(gobal

17、-configure.xml); 通过Document对象获得DOM的根节点Element rootElt = doc.getRootElement();现在咱们就可以通过rootElt对这个DOM进行操作了生成步骤 创建Document实例(org.jdom.Document) Document doc = new Document(); Element rootElt = new Element(selects); Element childElt1 = new Element(select); Element childElt1_name = new Element(name); chi

18、ldElt1_name.setText(重庆市); childElt1_name.setAttribute(id, 1); childElt1.addContent(childElt1_name); rootElt.addContent(childElt1); Element childElt2 = new Element(select); Element childElt2_name = new Element(name); childElt2_name.setText(贵州省); childElt2_name.setAttribute(id, 2); childElt2.addConten

19、t(childElt2_name); rootElt.addContent(childElt2); doc.addContent(rootElt);/Document document = new Document(rootElt); 创建XMLOutputter实例XMLOutputter outer = new XMLOutputter(); 这里还可以指定格式和设置编码Format format = Format.getPrettyFormat();format.setEncoding(GB2312);XMLOutputter outer = new XMLOutputter();out

20、er.setFormat(format); 通过输出流和XMLOutputter的output方法把Document写入文件outer.output(doc, new FileOutputStream(TestJDomWriteXML.xml);DOM4J步骤这里就可以通过看我的例子作业: 通过DOM4J把今天的读写XML的例子重新写一遍 完成课本后面的所有习题 自学XPath, 通过例子和手册学习(XPathTutorial.chm)课后作业第4题(Page:37)test4.xml 89 78 67 80 ReadTest4XML.javapackage net.vzhang.xml.te

21、st;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;impo

22、rt org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class ReadTest4XML public static void main(String args) DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new FileInputSt

23、ream(test4.xml); Element rootElt = doc.getDocumentElement(); / System.out.println(rootElt); int count = 0; double sum_math = 0; double sum_phy = 0; NodeList eltList = rootElt.getChildNodes(); for(int i = 0; i eltList.getLength(); i+) Node node = eltList.item(i); if(node.getNodeType() = Node.ELEMENT_

24、NODE) count+; NodeList nodeList = node.getChildNodes(); for(int ii = 0; ii nodeList.getLength(); ii+) Node cnode = nodeList.item(ii); if(cnode.getNodeType() = Node.ELEMENT_NODE) String name = cnode.getNodeName(); String value = cnode.getTextContent(); if(name.equals(数学) sum_math += Integer.parseInt(

25、value); if(name.equals(物理) sum_phy += Integer.parseInt(value); System.out.println(总人数: + count + , 数学平均成绩: + sum_math / count + , 物理平均成绩: + sum_phy / count); catch (ParserConfigurationException e) / TODO Auto-generated catch block e.printStackTrace(); catch (FileNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); catch (SAXException e) / TODO Auto-g

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1