博客
关于我
XML数据如何进行解析呢,方式有哪些?
阅读量:568 次
发布时间:2019-03-11

本文共 4330 字,大约阅读时间需要 14 分钟。

DOM、SAX、JDOM和DOM4J解析与创建XML的技术探讨

XML解析的四种主要方式

在处理XML数据时,Java开发者通常有四种主要的解析方式:DOM、SAX、JDOM和DOM4J。每一种方法都有其特点和适用场景。

1. DOM解析

DOM(Document Object Model,文档对象模型)以树状结构表示XML数据,允许对数据进行随机访问和修改。在DOM解析中,程序通过创建DOM解析器来读取和操作XML文件。

核心操作接口:

  • Document:代表整个XML文档,提供对整个文档数据的访问和操作入口。
  • Node:DOM树中的每个节点,包括文档节点、元素节点、属性节点和文本节点。
  • NodeList:表示节点集合,常用于存储有序的节点。
  • NamedNodeMap:用于表示节点与其名称的映射,主要用于处理属性节点。

DOM解析步骤:

  • 创建DocumentBuilderFactory和DocumentBuilder。
  • 解析目标XML文件,获取Document对象。
  • 使用getorra universal思路获取指定节点。
  • 通过DOM树进行数据操作。
  • 2. SAX解析

    SAX(Simple API for XML,简化XML应用程序编程接口)是一种事件驱动的解析方式,按照XML文件的顺序依次处理数据。SAX解析器会触发了一系列事件,如文档开始/结束、元素开始/结束、属性处理和文本内容处理。

    典型实现:

  • 创建SAXParserFactory和SAXParser。
  • 指定处理事件的Handler类。
  • 调用parse方法进行解析。
  • 3. JDOM解析

    JDOM是基于DOM和SAX的开源组件,支持读取大文件和修改数据。JDOM提供了直观的操作接口,便于将Java对象与XML数据进行映射。

    核心类别:

    • Document:表示整个XML文档。
    • Element:表示XML元素,支持添加、删除和修改操作。
    • Text:表示XML文本节点。
    • XMLOutputter:用于将JDOM对象转换为XML格式。

    JDOM解析步骤:

  • 创建SAXBuilder和Document对象。
  • 通过parse方法读取XML文件。
  • 调用Element和Text类进行数据操作。
  • 4. DOM4J解析

    DOM4J同样是Java的免费开源库,支持DOM和SAX操作。DOM4J提供了更灵活的API,功能强大且适合处理复杂的XML数据。

    核心类别:

    • Document:XML文档的入口。
    • Element:操作XML元素的节点。
    • XPath:支持XML路径表达式,简化节点查找。
    • Formatting:提供输出格式控制。

    DOM4J解析步骤:

  • 创建SAXReader和Document对象。
  • 调用read方法获取XML文档。
  • 使用XPath表达式获取特定节点或数据。
  • XML创建技术总结

    在实际开发中,有时并不仅仅是读取XML文件,而是需要自定义生成XML数据。这种情况下,我们需要考虑以下几种技术:

    1. DOM创建

    DOM(Document Object Model)可以用来手动创建和修改XML数据。开发步骤如下:

    public static void createXml() throws Exception {    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();    DocumentBuilder builder = factory.newDocumentBuilder();    Document doc = builder.newDocument();        Element root = doc.createElement("root");    root.setAttribute("id", "1");        Element child = doc.createElement("child");        Text text = doc.createTextNode("Hello World");    child.appendChild(text);    root.appendChild(child);    doc.appendChild(root);        TransformerFactory tfFactory = TransformerFactory.newInstance();    Transformer tf = tfFactory.newTransformer();        // 设置编码    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");        DOMSource source = new DOMSource(doc);    StreamResult result = new StreamResult(new FileOutputStream("output.xml"));        tf.transform(source, result);}
    2. SAX创建

    SAX提供了一种简化的方式来手动创建和构建XML数据。

    try {    SAXTransformerFactory stf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();        TransformerHandler handler = stf.newTransformerHandler();    Transformer tf = handler.getTransformer();        // 设置编码和格式    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");    tf.setOutputProperty(OutputKeys.INDENT, "yes");        File file = new File("output.xml");    if (!file.exists()) {        file.createNewFile();    }    Result result = new StreamResult(new FileOutputStream(file));    handler.setResult(result);        handler.startDocument();    AttributesImpl attr = new AttributesImpl();    attr.addAttribute("xml", "version", "1.0");        handler.startElement("", "Root", attr);        handler.characters("Hello World", 0, "Hello World".length());    handler.endElement("Root");        handler.endDocument();} catch (SAXException e) {    e.printStackTrace();} catch (FileNotFoundException e) {    e.printStackTrace();} catch (IOException e) {    e.printStackTrace();} catch (TransformerConfigurationException e) {    e.printStackTrace();}
    3. JDOM创建

    JDOM提供了一种更直观的方式来创建和操作XML数据。

    public static void createJdomXml() throws Exception {    SAXBuilder builder = new SAXBuilder();    Document doc = builder.build(new File("input.xml"));        // 修改节点和属性    doc.getRootElement().addContent(new Element("root"));        XMLOutputter out = new XMLOutputter();    out.output(doc, new FileOutputStream("output.xml"));}
    4. DOM4J创建

    DOM4J提供了灵活的API来创建和编辑XML数据。

    public static void createDom4JXml() throws Exception {    DocumentHelper helper = DocumentHelper.createDocumentHelper();    Document document = helper.createDocument();        Element root = document.addElement("root");    Element child = root.addElement("child");        child.text("Hello World");        OutputFormat format = OutputFormat.createPrettyPrint();    format.setIndent("  ");        XMLWriter writer = new XMLWriter(new FileOutputStream(new File("output.xml")), format);    writer.write(document);        writer.close();}

    总结

    DOM、SAX、JDOM和DOM4J都是处理XML数据的强大工具。每种方法有其独特的优势,选择哪种方式取决于具体的开发需求。对于读取操作,SAX和DOM4J可能更适合,而当需要对数据进行修改时,JDOM和DOM则提供了更高的灵活性。在实际项目中,可以根据具体场景权衡这几种技术。

    转载地址:http://jitvz.baihongyu.com/

    你可能感兴趣的文章
    一文学会JVM常见参数设置+调优经验(JDK1.8)
    查看>>
    一文理解设计模式--命令模式(Command)
    查看>>
    VTK:可视化之RandomProbe
    查看>>
    block多队列分析 - 2. block多队列的初始化
    查看>>
    Java时间
    查看>>
    不编译只打包system或者vendor image命令
    查看>>
    MySQL
    查看>>
    The wxWindows Library Licence (WXwindows)
    查看>>
    leetcode——第203题——虚拟头结点
    查看>>
    【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
    查看>>
    MySQL----基础及常用命令
    查看>>
    模拟集成:MOS管的工作区小误区(简单版)
    查看>>
    flink启动(二)
    查看>>
    前端开发进阶手册.pdf
    查看>>
    110.无限叠卡特效
    查看>>
    软件架构设计和MESH经验之谈
    查看>>
    redis持久化分析
    查看>>
    复杂指针解析
    查看>>
    打开word时424错误
    查看>>
    如何添加开机自启项
    查看>>