`

java-各种xml解析技术总结

    博客分类:
  • java
 
阅读更多

java-各种xml解析技术总结

 

需要导入相关jar包:

1、dom:
  DOMParser dOMParser = new DOMParser();
            dOMParser.parse(fileName);
            Document document = dOMParser.getDocument();
            Element element = document.getDocumentElement();
            NodeList studentNl = element.getElementsByTagName("student");
2、jdom:
    //使用SAXBuilder将给定的XML文档读入JDOM Document对象,
            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build(new File("D:/eclipseCode/edipsegaoji/xmlDom/src/student.xml"));
            Element foo = doc.getRootElement();
            List allChildren = foo.getChildren();
            for (int i = 0; i < allChildren.size(); i++) {
                Element e=(Element) allChildren.get(i);
                if(e.getName().equals("student")){
                    System.out.println("name:" +((Element) allChildren.get(i)).getChild("name").getText());
                    System.out.println("sex:"+ ((Element) allChildren.get(i)).getChild("sex").getText());   
                   List ll=e.getChildren();
                   System.out.println("ll =" +ll.size());
                    for (int j = 0; j < ll.size(); j++) {
                        Element e1=(Element) ll.get(j);
                        if(e1.getName().equals("lesson")){
                            System.out.println("lessonName:" +((Element) ll.get(j)).getChild("lessonName").getText());
                            System.out.println("lessonScore:"+ ((Element) ll.get(j)).getChild("lessonScore").getText());
                        }
                    }
               
                }
            }
3、dom4j:
File f = new File("D:/eclipseCode/edipsegaoji/xmlDom/src/student.xml");
            SAXReader reader = new SAXReader();
            Document doc = reader.read(f);
            Element root = doc.getRootElement();
            Element foo;
            Element foochild;
            System.out.println("XML文件开始解析");
            for (Iterator i = root.elementIterator("student"); i.hasNext();) {
                foo = (Element) i.next();
                System.out.println("name :" + foo.elementText("name"));
                System.out.println("sex :" + foo.elementText("sex"));
                for (Iterator j= foo.elementIterator("lesson"); j.hasNext();) {
                    foochild = (Element) j.next();
                    System.out.print(foochild.elementText("lessonName"));
                    System.out.println(" :" + foochild.elementText("lessonScore"));
                }
            }
4、sax:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sax;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

/**
 *
 * @author 尹彬
 */
public class TestSaxParser {

    public static void saxParserTest() {
        try {
            XMLReader xMLReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
            xMLReader.setContentHandler(new ContentHandler() {

                private int k;
                //DTD中定义的元素名
                private static final String ELEMENT_NAME = "name";
                private static final String ELEMENT_SEX = "sex";
                private static final String ELEMENT_LESSON = "lesson";
                private static final String ELEMENT_LESSON_NAME = "lessonName";
                private static final String ELEMENT_LESSON_SCORE = "lessonScore";
                private static final String ELEMENT_STUDENT = "student";
                private static final String ELEMENT_LINE = "breakLine";
                //当前元素的数据
                private String currentData = "";
                private String lessonName = "";
                private String lessonScore = "";

                /**
                 * 当其他某一个调用事件发生时,先调用此方法来在文档中定位。
                 */
                public void setDocumentLocator(Locator locator) {
                }

                /**
                 * 在解析整个文档开始时调用
                 */
                public void startDocument() throws SAXException {
                    System.out.println("XML文件开始解析");
                }

                /**
                 * 在解析整个文档结束时调用
                 */
                public void endDocument() throws SAXException {
                    System.out.println("XML文件解析结束");
                }

                /**
                 * 在解析命名空间开始时调用
                 */
                public void startPrefixMapping(String prefix, String uri) throws SAXException {
                }

                /**
                 * 在解析命名空间结束时调用
                 */
                public void endPrefixMapping(String prefix) throws SAXException {
                }

                /**
                 * 在解析元素开始时调用
                 */
                public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
                }

                /**
                 * 在解析元素结束时调用
                 * @param namespaceURI
                 * @param localName 本地名,如student
                 * @param qName 原始名
                 */
                public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
                    //System.out.println(++k +" = endElement");
                    if (localName.equals(ELEMENT_NAME)) {
                        System.out.println(localName + ":" + currentData);
                    }

                    if (localName.equals(ELEMENT_SEX)) {
                        System.out.println(localName + ":" + currentData);
                    }

                    if (localName.equals(ELEMENT_LESSON_NAME)) {
                        System.out.println(++k + " = lessonName");
                        this.lessonName = currentData;
                    }

                    if (localName.equals(ELEMENT_LESSON_SCORE)) {
                        System.out.println(++k + " = lessonScore");
                        this.lessonScore = currentData;
                    }

                    if (localName.equals(ELEMENT_LESSON)) {
                        System.out.println(++k + " = lession");
                        System.out.println(lessonName + ":" + lessonScore);
                    }

                    if (localName.equals(ELEMENT_LINE)) {
                        System.out.println("------------------------------------");
                    }
                }

                /**
                 * 取得元素数据
                 */
                public void characters(char[] ch, int start, int length) throws SAXException {
                    currentData = new String(ch, start, length).trim();
                }

                /**
                 * 取得元素数据中的空白
                 */
                public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
                }

                /**
                 * 在解析到处理指令时,调用此方法。
                 * 这些处理指令不包括XML的版权指令,它由解析器本身识别。
                 */
                public void processingInstruction(String target, String data) throws SAXException {
                }

                /**
                 * 当未验证解析器忽略实体时调用此方法
                 */
                public void skippedEntity(String name) throws SAXException {
                }
            });
            xMLReader.parse(TestSaxParser.class.getResource("/") + "student.xml");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

下面是xml:
<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : student.xml
    Created on : 2010年4月6日, 下午3:01
    Author     : Administrator
    Description:
        Purpose of the document follows.
-->
<!DOCTYPE StudentInfo SYSTEM "student.dtd">
<StudentInfo>
    <student>
        <name>刘伟</name>
        <sex>男</sex>
        <lesson>
            <lessonName>Java初级</lessonName>
            <lessonScore>85</lessonScore>
        </lesson>
        <lesson>
            <lessonName>Oracle数据库</lessonName>
            <lessonScore>95</lessonScore>
        </lesson>
        <lesson>
            <lessonName>Java中级</lessonName>
            <lessonScore>80</lessonScore>
        </lesson>
        <lesson>
            <lessonName>Java高级</lessonName>
            <lessonScore>100</lessonScore>
        </lesson>
    </student>
    <breakLine />
    <student>
        <name>花木兰</name>
        <sex>女</sex>
        <lesson>
            <lessonName>射箭</lessonName>
            <lessonScore>100</lessonScore>
        </lesson>
        <lesson>
            <lessonName>柔道</lessonName>
            <lessonScore>95</lessonScore>
        </lesson>
        <lesson>
            <lessonName>国学</lessonName>
            <lessonScore>80</lessonScore>
        </lesson>
        <lesson>
            <lessonName>烹饪</lessonName>
            <lessonScore>60</lessonScore>
        </lesson>
        <lesson>
            <lessonName>游泳</lessonName>
            <lessonScore>70</lessonScore>
        </lesson>
    </student>
    <breakLine/>
</StudentInfo>

分享到:
评论

相关推荐

    java xml解析工具类 java xml解析工具类

    java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析...

    vtd-xml XML解析工具

    总的来说,VTD-XML是一种强大的XML解析解决方案,它通过独特的VTD技术为开发者提供了更高效、更节省资源的XML处理方式。无论是在大型企业系统还是在小型应用中,VTD-XML都能以其出色的性能和丰富的功能满足各种XML...

    JAVA -XML解析总结

    【Java - XML解析总结】 XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和Web服务。Java 提供了多种方法来解析 XML 文档,主要包括 DOM(Document Object Model)和 ...

    基于java的开发源码-用jdom解析xml.zip

    基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xml

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...

    java-xml解析2

    本文将围绕给定的“java-xml解析”这一主题进行深入探讨。 #### 二、JDBC 与 XML 的关系 尽管提供的部分内容主要介绍了 JDBC(Java Database Connectivity)的相关概念,但这里我们关注的是如何利用 Java 对 XML ...

    java心电图xml解析.zip

    通过研究这个“java心电图xml解析.zip”中的源码,可以深入理解如何在实际项目中应用XML解析技术,以及如何处理特定领域(如医疗)的数据。同时,这也提供了一个学习和实践Java XML解析能力的好机会。

    dom4j---xml解析jar包

    **DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...

    dom4j---xml解析包

    它是一个灵活且功能丰富的XML解析器,提供了多种方式来读取、写入、修改和操作XML数据。在Java开发中,DOM4J因其高效的性能和易用性而备受青睐,尤其在处理大量XML数据时,它的优势更为明显。 XML(eXtensible ...

    java解析xml数据---sax解析器

    Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...

    java 解析xml 多级

    总结来说,Java提供了多种解析XML的方法,包括DOM、SAX和JAXB等。对于处理多级嵌套的XML,DOM和JAXB在操作上更为便捷,而SAX则适用于处理大规模文件。在具体选择时,应根据项目需求和资源限制进行权衡。

    java实现xml解析word文档代码实现

    Java 实现 XML 解析 Word 文档代码实现 基于给定的文件信息,我们可以总结出以下知识点: 1. Java 实现 XML 解析 Word 文档 Java 可以使用多种方式来解析 Word 文档,包括使用 Apache POI 库、Java2Word 库等。...

    Java中四种XML解析技术分析对比

    本篇文章将深入探讨四种主要的XML解析技术——DOM、SAX、StAX以及JAXB,并进行详细的分析与对比。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一个树形结构,即DOM树。这种解析方式...

    java大作业xml解析

    Java大作业中涉及的XML解析是一项重要的编程任务,XML(eXtensible Markup Language)是一种用于标记数据的语言,因其灵活性和可扩展性被广泛应用于数据存储、配置管理和数据交换。XML文件以.xml为后缀,其结构清晰...

    j-sim安装程序xml补丁xml-java-packages.zip

    XML补丁通常包含了对Java XML解析器的更新或扩展,使得J-Sim在处理XML数据时能更加高效和稳定。 xml-java-packages.zip中的三个重要文件: 1. xalan.jar:Xalan是Apache软件基金会的一个开源项目,提供了符合W3C...

    xerces-1.4.3 XML解析器

    通过导入这个jar包,开发者可以在自己的Java应用中使用Xerces提供的XML解析功能。 **xerces_license.txt**:这个文件通常包含软件的许可协议信息,对于Xerces来说,这意味着它是遵循Apache License 2.0发布的。这...

Global site tag (gtag.js) - Google Analytics