【JAVA】XML及其解析技术、XML检索技术、设计模式

这篇具有很好参考价值的文章主要介绍了【JAVA】XML及其解析技术、XML检索技术、设计模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

XML

XML(Extensible Markup Language)是可扩展标记语言的缩写,它是一种数据表示格式,可以描述复杂的数据结构,常用于传输和存储数据

作用:

  • 用于进行存储数据和传输数据
  • 作为软件的配置文件

第一行是文档声明

<?xml version="1.0" encoding="UTF-8" ?>
version:XML默认的版本号码、该属性是必须存在的
encoding:本XML文件的编码

特殊字符

&lt;    小于
&gt;    >  大于
&amp;   &  和号
&apos;  '  单引号
&quot;  "  引号

注释

<!-注释内容-->

文档约束

限定xml文件中的标签和属性

  • DTD文档约束
  • schema文档约束(约束能力更强大)

XML解析

使用程序读取XML内容

常用的解析工具

JAXP

SUN公司提供的一套XML的解析的API

JDOM

JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。

dom4j

JDOM的升级品,用来读写XML文件的。具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom 技术,同时它也是一个开放源代码的软件,Hibernate也用它来读写配置文件。

jsoup

功能强大DOM方式的XML解析开发包,尤其对HTML解析更加方便

dom4j解析XML元素

思想:得到文档对象document,从获取元素对象和内容

List<Element> elements()

得到当前元素下所有子元素

List<Element> elements(String name)

得到当前元素下指定名字的子元素返回集合

Element element(String name)

得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个

String getName()

得到元素名字

String  attributeValue(String name)

通过属性名直接得到属性值

String elementText(子元素名)

得到指定名称的子元素的文本

String getText()

得到文本

XML检索:Xpath

Dom4j需要对文件进行全部解析,然后再寻找数据

Xpath技术更适合做信息检索

绝对路径

/根元素/子元素/孙元素

从根元素开始,一级一级向下查找,不能跨级

public void parse01() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        // c、直接检索:
        List<Node> nodes = document.selectNodes("/contactList/contact/name");
        for (Node node : nodes) {
            Element nameEle = (Element) node;
            System.out.println(nameEle.getTextTrim());
        }
    }

相对路径

./子元素/孙元素

从当前元素开始,一级一级向下查找,不能跨级

public void parse02() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));
        Element root = document.getRootElement();
        // c、直接检索:.代表的就是当前相对的根元素
        List<Node> nodes = root.selectNodes("./contact/name");
        for (Node node : nodes) {
            Element nameEle = (Element) node;
            System.out.println(nameEle.getTextTrim());
        }
    }

全文搜索(直接全文搜索所有的name元素并打印)

//contact

contact元素,无论元素在哪里

//contact/name

contact,无论在哪一级,但name一定是contact的子节点

//contact//name

contact无论在哪一种,name只要是contact的子孙元素都可以找到

public void parse03() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));

        // c、直接检索:
        // List<Node> nodes = document.selectNodes("//name");
        // List<Node> nodes = document.selectNodes("//contact/name");
        List<Node> nodes = document.selectNodes("//contact//name");
        for (Node node : nodes) {
            Element nameEle = (Element) node;
            System.out.println(nameEle.getTextTrim());
        }
    }

属性查找(在全文中搜索属性或带属性的元素)

//@属性名

查找属性对象,无论是哪个元素,只要有这个属性即可。

//元素[@属性名]

查找元素对象,全文搜索指定元素名和属性名。

//元素//[@属性名=‘]

查找元素对象,全文搜索指定元素名和属性名,并且属性值相等。文章来源地址https://www.toymoban.com/news/detail-667948.html

public void parse04() throws Exception {
        // a、创建解析器对象
        SAXReader saxReader = new SAXReader();
        // b、把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/Contacts2.xml"));

        // c、检索属性信息
        List<Node> nodes = document.selectNodes("//@id");
        for (Node node : nodes) {
            Attribute attribute = (Attribute) node;
            System.out.println(attribute.getName() + "=" + attribute.getValue());
        }

        // 检索元素的
        List<Node> nodes1 = document.selectNodes("//contact[@id]");
        for (Node node : nodes1) {
            Element nameEle = (Element) node;
            System.out.println(nameEle.elementTextTrim("name"));
        }

        // 检索元素
        Node node = document.selectSingleNode("//contact[@id='3']");
        Element conEle = (Element) node;
        System.out.println(conEle.elementTextTrim("name"));
    }

设计模式

  • 工厂模式:对象通过工厂的方法创建返回,工厂的方法可以为该对象进行加工和数据注入(可以实现类与类之间的解耦操作)
  • 装饰模式:创建一个新类,包装原始类,从而在新类中提升原来类的功能(在不改变原类的基础上,动态的扩展一个类的功能)

到了这里,关于【JAVA】XML及其解析技术、XML检索技术、设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式:深入解析与应用示例

    设计模式是一种在特定上下文中反复出现的可重用解决方案,用于处理软件设计中常见的问题。掌握设计模式不仅可以帮助我们编写出更优雅、更易于理解和维护的代码,而且也是Java面试中的常考知识点。在本文中,我们将探讨几种常见的设计模式,包括它们的定义、使用场

    2024年02月09日
    浏览(33)
  • JAVA设计模式详解(独家AI解析)

    可以查阅JAVA快速入门体验 设计模式的六大原则是一组指导性原则,它们帮助开发人员设计出灵活、可维护和可扩展的软件系统。以下是这些原则的简要介绍: 单一职责原则 (Single Responsibility Principle,SRP): 一个类应该只有一个引起它变化的原因。换句话说,一个类应该只

    2024年02月08日
    浏览(33)
  • 【C++设计模式】UML图的介绍及其画法

    在软件开发过程中,设计模式是一种被广泛应用的方法,它为解决特定问题提供了可复用的、经过验证的解决方案。C++是一种支持面向对象编程的语言,因此在C++中应用设计模式是非常常见的。为了更好地理解和交流设计模式,人们通常使用UML(Unified Modeling Language)图来描述

    2024年03月13日
    浏览(30)
  • 【JAVA开发面试】如何处理并发访问如何进行代码的单元测试Java多线程编程消息中间件设计模式技术难题是如何解决的

    【 点我-这里送书 】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明

    2024年02月03日
    浏览(45)
  • 软考高级系统架构设计师(九) 作文模板-论设计模式及其应用(未完待续)

    目录 掌握的知识点 创建型 结构型 行为型 设计模式分为哪3类   每一类包含哪些具体的设计模式 创建型 创建型模式是 对对象实例化过程的抽象,他通过抽象类所定义的接口,封装了系统中对象如何创建、组合等信息 。   创建型模式主要用于创建对象,做到了软件模块跟对

    2024年02月12日
    浏览(43)
  • 【设计模式】代理模式例子解析

    代理模式,顾名思义,就是我们在需要访问一个类时,并不直接调用这个类,而是通过一个\\\"代理\\\"来间接地实现这个过程。 这个“代理”就像是真实对象的一个接口,所有的对于真实对象的操作都需要通过这个“代理”来实现。“郑重其事的代理”,这或许是代理模式的最好

    2024年01月25日
    浏览(33)
  • 设计模式:智能合约的经典设计模式及解析

        苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏  ← 持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 总而言之,智能合约实现上要达到的目标是: 完备的业务功能、精悍的代码逻辑、良好的模块抽象、清

    2024年04月12日
    浏览(31)
  • 万字解析设计模式之原型模式与建造者模式

    原型模式是一种创建型设计模式,其目的是使用已有对象作为原型来创建新的对象。 原型模式的核心是克隆 ,即通过复制已有对象来创建新对象,而不是通过创建新对象的过程中独立地分配和初始化所有需要的资源。这种方式可以节省创建对象的时间和资源,特别是在创建

    2024年02月06日
    浏览(41)
  • 设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析

    ​🌈 个人主页: danci_ 🔥 系列专栏: 《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 策略模式与模板方法模式对比解析         在人工智能的世界里,设计模式不仅是构建高效、可维护代码的秘密武器,也是理解和掌握大模型内在机制的钥

    2024年04月08日
    浏览(73)
  • 万字解析设计模式之单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个 单一 的类,该类负责创建自己的对象,同时确保 只有单个对象被创建 。这个类提供了一种访问其唯一的对象的方式,

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包