您好,欢迎访问三七文档
—高级软件人才实作培训专家!广州传智播客gz.itcast.cnXML解析徐仕锋—高级软件人才实作培训专家!北京传智播客教育文档的解析XML文档的解析方式:•DOM(JAXP)•DOM解析器使用树形模型,把XML文档转化为一个包含其内容的树,并可以对树进行遍历。•SAX•SAX解析器采用了基于事件的模型,解析XML文档的时候可以触发一系列的事件。•JDOM•JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。•DOM4J•DOM4J是一个非常非常优秀的JavaXMLAPI,具有性能优异、功能强大和极端易用使用的特点。—高级软件人才实作培训专家!广州传智播客gz.itcast.cnJava技术+XML一种完美的组合Java平台是一种跨平台的编程环境XML是一种跨平台的数据格式与其他语言相比,Java平台提供了更好的XML支持—高级软件人才实作培训专家!广州传智播客gz.itcast.cnDOMDocumentObjectModel的缩写通过树型结构存取XML文档可以在树的某个节点上向前或向后移动org.w3c.dom.*—高级软件人才实作培训专家!广州传智播客gz.itcast.cn基于树的处理使用DOM时,数据以类树结构被装入内存中。DOM使用根节点和父子关系。—高级软件人才实作培训专家!广州传智播客gz.itcast.cnDOM示意解析器创建的树输入XML文档—高级软件人才实作培训专家!北京传智播客教育文档的节点DOM(DocumentObjectModel)•文档对象模型•DOM的三层模型将HTML、XML文档定义成树形结构。•文档中的标签,属性,文本等都封装成了节点对象。•封装成对象的好处就是更易于操作这些节点。•DOM本身就是对外暴露的一套API。—高级软件人才实作培训专家!北京传智播客教育文档的节点一个XML文档中只有一个根节点•没有父节点的元素节点元素节点•根节点和根节点中的所有标签都是元素节点属性节点•studentid=“001”/studentid就是属性节点文本节点•namezhangsan/namezhangsan就是文本节点注释节点•!----xml文档中的注释信息—高级软件人才实作培训专家!北京传智播客教育DOM在java平台上的应用dom4j是一套开源的类库。集成的XPath(路径查询语言)支持、XMLSchema(约束模式文档)支持。具体操作:•获取到dom4j的jar包以及帮助文档。•将jar包设置到classpath中,就可以使用dom4j中提供的对象,进行xml文档的解析了。•查看帮助文档了解对象的使用。—高级软件人才实作培训专家!北京传智播客教育文档基本操作——Document获取xml文档对象Document。FilexmlFile=newFile(“test.xml”);SAXReaderreader=newSAXReader();DocumentxmlDoc=reader.read(xmlFile);—高级软件人才实作培训专家!北京传智播客教育文档基本操作——Element获取根元素对象Elementroot=xmlDoc.getRootElement();获取根元素名称StringelementName=root.getName();获取直接子元素对象•通过元素名称获取元素对象Elementelement=root.element(“元素名称);•获取所有直接子元素对象集合ListelementList=root.elements();—高级软件人才实作培训专家!北京传智播客教育文档基本操作——Element获取元素对象中的文本•获取element元素的内部文本Stringtext=element.getText();•获取element子元素内部文本Stringtext=element.elementText(“子元素名称”);—高级软件人才实作培训专家!北京传智播客教育文档基本操作——Attribute获取元素属性对象•通过属性名获取元素属性对象Attributeattribute=element.attribute(“属性名称);•通过索引获取属性对象Attributeattribute=element.attribute(0);•获取所有属性对象集合ListattributeList=root.attributes();获取属性值•通过属性对象Stringvalue=attribute.getValue();•通过元素对象Stringvalue=element.attributeValue(“属性名称”);—高级软件人才实作培训专家!北京传智播客教育Document:用于描述XML文档。Element:用于描述XML文档中的元素。Attribute:用于描述XML文档中的元素的属性。—高级软件人才实作培训专家!北京传智播客教育文档基本操作——创建创建文档Document•Documentdocument=DocumentHelper.createDocument();创建元素•Elementelement=document.addElement(“元素名称);创建属性•element.addAttribute(“属性名”,“属性值);•添加属性方法返回的是原元素对象。如同StringBuffer。创建文本•element.addText(“文本);—高级软件人才实作培训专家!北京传智播客教育文档基本操作——删除节点remove(Elementelement)remove(Attributeattribute)remove(Texttext)……remove(Nodenode)Node接口的子类对象都可以移除注意:remove是移除直接子节点时使用parentElement.remove(childElement);—高级软件人才实作培训专家!北京传智播客教育文档基本操作——建立xml文件建立xml文件FileWriterfw=newFileWriter(“students2.xml”);XMLWriterwriter=newXMLWriter(fw);writer.write(document);writer.close();建立漂亮的xml文档,可以指定字符编码OutputFormatformat=OutputFormat.createPrettyPrint();format.setEncoding(“GBK);XMLWriterwriter=newXMLWriter(fw,format);—高级软件人才实作培训专家!广州传智播客gz.itcast.cnDOM的问题DOM构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。DOM创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。DOM解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。—高级软件人才实作培训专家!广州传智播客gz.itcast.cnJAXP-DOM代码例子publicstaticvoidmain(String[]args){//获取DocumentBuilderFactory的新实例。DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();//指定由此代码生成的解析器将忽略注释dbf.setIgnoringComments(true);//设置忽略空格dbf.setIgnoringElementContentWhitespace(true);DocumentBuilderdb=null;Documentdocument=null;try{//获取DocumentBuilder的实例db=dbf.newDocumentBuilder();Filefile=newFile(D:\\itcastworkspace\\xmldom\\src\\cn\\itcast\\dom\\students.xml);document=db.parse(file);—高级软件人才实作培训专家!广州传智播客gz.itcast.cnJAXP-DOM代码例子//按文档顺序返回包含在文档中且具有给定标记名称的所有Element的NodeListNodeListnodeList=document.getElementsByTagName(name);for(inti=0;inodeList.getLength();i++){Nodenode=nodeList.item(i);//输出标记的值System.out.println(node.getFirstChild().getNodeValue());}}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}—高级软件人才实作培训专家!广州传智播客gz.itcast.cnSAXSimpleAPIforXML的缩写串行存取文档轻量级、快速编程较难仅用于串行存取org.xml.sax.*—高级软件人才实作培训专家!广州传智播客gz.itcast.cnSAXSAX解析器在解析开始的时候就开始发送事件。当解析器发现文档开始、元素开始和文本等时,代码会收到一个事件。SAX解析器根本不创建任何对象,它只是将事件传递给您的应用程序。如果希望基于那些事件创建对象,这将由您来完成。—高级软件人才实作培训专家!广州传智播客gz.itcast.cnSAX的行为—高级软件人才实作培训专家!广州传智播客gz.itcast.cnSAX代码例子publicclassSAXReadXML{publicstaticvoidmain(String[]args){//创建SAXParserFactory对象SAXParserFactoryspf=SAXParserFactory.newInstance();try{//创建SAXParser对象SAXParsersaxParser=spf.newSAXParser();Filefile=newFile(“D:\\itcastworkspace\\xmlSax\\src\\cn\\itcast\\sax\\students.xml”);/*解析文件*newXMLContentHandler()事件处理程序*/saxParser.parse(file,newXMLContentHandler());}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}—高级软件人才实作培训专家!广州传智播客gz.itcast.cnSAX代码例子publicclassXMLContentHandle
本文标题:02Xml解析
链接地址:https://www.777doc.com/doc-3049194 .html