文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java怎么解析XML

2023-06-20 15:30

关注

本篇内容主要讲解“java怎么解析XML”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么解析XML”吧!

目录

XML的主要用途

XML的语法严格,并且完全区分大小写

java怎么解析XML

XSL (eXtensible Stylesheet Language)-修饰XML XSL文件也有单独的文件,文件后缀 .xsl

通过以下陈程序引入xsl文件

<?xml-stylesheet type="text/xsl" href="student.xsl"?>

DTD (Docment Type Definition)-约定xml的标签 在XML文件中只能编写那些标签,标签中只能编写那些属性 DTD有单独的文件,文件后缀 .dtd

DTD实例

java怎么解析XML

Schema-约定xml标签和类型,比DTD编写更加方便,(约束XML文件) schema有单独的文件,文件后缀 .xsd/.xml

实例是:

<?xml version="1.0" encoding="gb2312"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="丛书"><xs:complexType><xs:sequence><xs:element name="书"><xs:element name="名"  minoccurs="1"></xs:element><xs:element name="人"></xs:element><xs:element name="价"><xs:attribute name="unit"><xs:enumeration value="RMB"/><xs:enumeration value="美元"/><xs:enumeration value="日元"/></xs:attribute></xs:element></xs:element></xs:sequence></xs:complexType></xs:element></xs:schema>

可以扩展的原因:DTD可以修改

对比HTML

HTML(Hyper Text Markup language

*超文本传输标记语句(程序员不能自己扩展)

*HTML主要用途:做页面展示,不会做数据处理

*语法松散,不区分大小写

CSS

DTD(Doucment Type Defined)约束HTML能有那些标签,标签能有那些属性

schema (DTD的升级版,语法更新一些,和DTD达到同等效果)

不可扩展原因:DTD不可扩展

关于XML文件的解析?

*无论是哪一种编程语言,对XML文件的解析都包括两种方式:

*DOM解析

*SAX解析(org.xml.sax.helps DefaultHandler)

DOM解析

*原理

在开始解析XML文件的时候,将整个XMl文件全部加载到内存中

在内存中编程语言将XML文件映射成一颗DOM树,这颗树就是一个

对象,然后我们对这棵树上的任意节点进行增删改查操作,由于

这棵树全部都在内存上,解析过去的节点可以再次解析,比较灵活。

*优点

灵活,解析过去的节点,可以再次解析

*缺点

如果XML文件比较大,可能会导致内存溢出,即使不导致内存溢出,

也会耗费大量内存,内存少了项目的运行效率自然就降低了。

*什么情况下选择dom解析方式

如果很灵活的操作每一个元素,选用dom解析,但是注意文件需要小一些

SAX解析

*原理

SAX解析是基于事件驱动型的解析方式,他的解析不需要将整个XML文件全部

转载到内存中,解析的时候是有顺序的,在XML文件中从上往下依次解析,遇

到开始标签,表示发生了一个特定的事件,此时执行一段特定的程序,遇到结束

标签表示又发生一个特定事件,此时执行一段特定的程序完成解析。

*优点

不需要转载XML文件,所以不会占用大量内存, 适合大文件

*缺点

解析过去的节点不能重复解析,除非重头开始

*什么情况下选择SAX解析方式

大文件适合使用SAX解析

作为程序员如何解析XML文件,解析XMl文件的开源项目都包括那些?

java解析XML相关的开源项目

*DOM4j(Dom for Java)

*JDOM

.....

JDK自带一套,是实现W3C规范的

*org.w3c.com.*; 基于DOM解析

*org.xml.sax.*; 基于SAX解析

为了提高我们解析XMl文件的效率,还涉及到XPATH。(是一种标签匹配方式,类似于正则表达式,可以让我们程序快速定位XML文件中的标签)

解析XML文件涉及到:

DOM4j/JDOM/W3C+......Xpath

JDK自带的一套解析

首先在src目录下创建一个xml文件

java怎么解析XML

以下为解析过程

public class Text04 {    public static void main(String[] args) throws Exception {        //创建文档解析器工厂对象        DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();        //创建文档解析器对象        DocumentBuilder builder=factory.newDocumentBuilder();        //开始解析XML文件        String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath();        Document document =builder.parse(new File(path));//dom树,在内存中生成了一颗dom树        //获取根元素        Node rootNode=document.getFirstChild();        //获取根元素的名字        System.out.println(rootNode.getNodeName());        //通过根元素获取其他元素        Node driverNode=document.getElementsByTagName("driver").item(0);        String driver =driverNode.getTextContent();        System.out.println(driver);    }}

输出结果

java怎么解析XML

使用dom4j开源项目(基于dom解析)解析xml文件(读)

需要将dom4j开源项目的jar包作为目录导入

public class Text01 {    public static void main(String[] args) throws Exception {        //创建解析器对象        SAXReader reader=new SAXReader();//虽然使用了SAXReader,但是还是基于DOM的解析方式        //获取文档对象,还是dom树        String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath();        Document document= reader.read(new File(path));        //获取根元素        Element rootElement=document.getRootElement();        //System.out.println(element.getName());        //获取driver元素        Element driverElement =rootElement.element("driver");        //在获取文本        String driver=driverElement.getText();        //System.out.println(driver);        //直接获取元素的文本内容        driver=rootElement.elementText("driver");        System.out.println(driver);        System.out.println(rootElement.elementText("url"));        System.out.println(rootElement.elementText("user"));        System.out.println(rootElement.elementText("password"));    }}

输出结果

java怎么解析XML

使用dom4j开源项目(基于dom解析)解析xml文件(写)

import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;import java.io.File;import java.io.FileWriter;public class Text02 {    public static void main(String[] args) throws Exception {        //创建文档对象        Document document= DocumentHelper.createDocument();        //添加根元素        Element studentInfoElt=document.addElement("学生信息");        //给学生信息节点添加子节点学生节点        Element studentElt=studentInfoElt.addElement("学生");        //给学生节点添加id属性        studentElt.addAttribute("id","110");        //给学生节点添加名字字节点        Element nameElt=studentElt.addElement("名字");        //设置名字节点文本        nameElt.setText("张三");        //给学生节点添加性别字节点        Element sexElt=studentElt.addElement("性别");        //设置名字节点文本        sexElt.setText("男");        //开始写        OutputFormat format= OutputFormat.createPrettyPrint();        format.setEncoding("utf-8");        String path="students.xml";        XMLWriter xmlWriter=new XMLWriter(new FileWriter(new File(path)),format);        xmlWriter.write(document);        xmlWriter.close();    }}

最终生成的xml文件

java怎么解析XML

到此,相信大家对“java怎么解析XML”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯