《Java高级程序设计》第四章Java处理XML教育机构回顾数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有基本类型的数据。java.util里面有一个Arrays类,它包括了一组可用于数组的static方法,这些方法都是一些实用工具。Java2的容器类要解决“怎样持有对象”,而它把这个问题分成两大类:Collection和Map。容器的选择和常用容器的使用及实现中国十大品牌IT教育机构XML的概念XML即可扩展的标记语言,可以定义语义标记(标签),是元标记语言。XML不像超文本标记语言HTML,HTML只能使用规定的标记,对于XML,用户可以定义自己需要的标记。XML(eXtensibleMarkupLanguage)和HTML(HyperTextMarkupLanguage)师出同门,都是从SGML(StandardGeneralizedMarkupLanguage)延伸而出的标记语言数据解析器应用程序文档“对象”文本对象对象对象对象对象对象中国十大品牌IT教育机构JAXPJAXP是JavaAPIforXMLProcessing的英文字头缩。用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。JAXP既可以和具体实现DOMAPI、SAXAPI的各种XML解析器联合工作,又可以和具体执行XSLT标准的XSLT处理器联合工作。JAXP不提供语法分析功能。,DocumentObjectModel,文档对象模型。DOM是html和xml文档的编程接口规范,和平台、语言是无关的。利用dom规范,能够实现dom文档和xml之间的相互转换,遍历、操作相应dom文档的内容。DOM规范的核心就是树模型。的结合体。JDOM致力于建立一个完整的基于Java平台的、通过Java代码来访问、操作并输出XML数据。JDOM是用Java语言读、写、操作XML的新API函数。简单、高效、优化。,SimpleAPIForXML。非W3C官方所提供的标准,“民间”的事实标准。SAX在概念上与DOM完全不同。非文档驱动,是事件驱动的。事件驱动:一种基于回调机制的程序运行方法。SAX解析器装载XML文件时,它遍历XML文档并在其主机应用程序中产生事件(经由回调函数、指派函数或者任何可调用平台完成这一功能)表示这一过程。,类似于jdom,用来读写XML文件的。性能优异功能强大简单易用开放源代码。中国十大品牌IT教育机构使用DOM操作XML-工作原理f.xml.parse(”f.xml”).newDocument().newDocumentBuilder()DocumentBuilderFactory(Stringname)throwsDOMExcept用给定的属性名,创建一个Attr对象,然后可以使用setAttributeNode方法来放置在Element上ElementcreateElement(StringtagName)throwsDOMException用给定的标签创建一个Element对象,可以直接在这的对象上指定属性。TextcreateTextNode(Stringdata)用指定的字符串创建一个Text对象NodeListgetElementsByTagName(Stringtagname)返回一个NodeList对象,它包含所有给定标签名字的标签ElementgetDocumentElement()返回一个代表这个DOM树的根节点的Element对象()如果存在子节点,则返回第一个节点,否则返回null。NodegetLastChild()如果存在子节点,则返回最后一个节点,否则返回null。StringgetNodeName()得到节点的名称shortgetNodeType()得到节点的类型StringgetNodeValue()throwsDOMException得到节点的属性值()得到列表中的Node的数量Nodeitem(intindex)返回集合中的第index个项。如果index大于或等于此列表中的节点数,则返回null(Stringname)返回一个NodeList对象StringgetTagName()返回该节点的名称,节点名称就是对应的XML文件的标记名称StringgetAtrribute(Stringname)返回该节点中参数name指定的属性值,XML标记中对应的属性值shortgetNodeType()得到节点的类型AttrgetAttributeNode(Stringname)根据属性名得到Attr对象接口,表示Element对象中的属性。但由于“属性”实际上不是一个子节点,DOM不会将它们看作文档树的一部分。DOM认为元素的属性是其特性,而不是一个来自于它们所关联的元素的独立的身份。建立一个解析器工厂。DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();利用DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象。Document对象代表了一个XML文档的树模型。Documentdoc=builder.parse(“books.xml);以利用这个工厂来获得一个具体的解析器对象。DocumentBuilderbuilder=dbf.newDocumentBuilder();()方法提取某个标签内的内容。node.getElementsByTagName(NAME).item(0).getFirstChild().getNodeValue()使用Document对象的getElementsByTagName()方法,得到一个NodeList对象,它是XML文档中的标签元素列表,可以使用NodeList对象的item()方法来得到列表中的每一个Node对象。NodeListnl=doc.getElementsByTagName(book);For(inti=0;in1.getlength();i++){Elementnode=(Element)nl.item(i);}(Stringuri){ArrayListlist=newArrayList();try{DocumentBuilderFactoryDBfactory=DocumentBuilderFactory.newInstance();DocumentBuilderDBbuilder=DBfactory.newDocumentBuilder();Documentdoc=DBbuilder.parse(uri);NodeListnodeList=doc.getElementsByTagName(book);for(inti=0;inodeList.getLength();i++){Stringbooktitle=doc.getElementsByTagName(booktitle).item(i).getFirstChild().getNodeValue();Stringauthor=doc.getElementsByTagName(author).item(i).getFirstChild().getNodeValue();Stringprice=doc.getElementsByTagName(price).item(i).getFirstChild().getNodeValue();Bookbook=newBook();book.setBookTitle(booktitle);book.setAuthor(author);book.setPrice(price);list.add(book);}}catch(Exceptione){e.printStackTrace();}returnlist;}(String[]args)throwsException{//DOM工厂创建document对象DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();Documentdocument=db.newDocument();//在内存中组织DOM对象document.setXmlVersion(1.0);Elementroot=document.createElement(root);Attratr=document.createAttribute(id);atr.setValue(aa);root.setAttributeNode(atr);root.appendChild(document.createElement(书));document.appendChild(root);//创建Xml文件转换器Trans