XML详解(1)全面了解XML是什么

平时编程总是用到XML文件,却很少认真去了解,今天准备系统的学习一下XML文件

XML的作用和写法

XML 被设计用来传输和存储数据。

HTML 被设计用来显示数据。

XML 指可扩展标记语言(eXtensible Markup Language)。

可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。 我都没太用过先不了解了

总而言之XML被设计出来是用来传输何存储数据的

<?xml  version="1.0"  encoding="GBK" ?>

这里encoding表示用什么编码格式来读取我的xml文件,假如我们用的UTF-8编码写的文件,这里写的GBK,就表示用GBK来读取,会导致乱码。如果你不写的话,程序不知道用哪个编码来读,就会以默认的编码来读取这个文件,就可能导致乱码

在XML中有且仅有一个根节点,比如说我定义一个

<students>
     <student id="1">
           <name>张三</name>
           <age>20</age>
           <sex>男</sex>
     </student>
     <student id="2">
           <name>李四</name>
           <age>20</age>
           <sex>女</sex>
     </student>
</students>

现在是我们自己定义规范里面爱咋写咋写,这样我们一个XML就写完了,如果还想加也可以加,爱咋写咋写,属性也是一样的爱咋写咋写,这就是一个XML文档。不过读的时候,要根据这个结构来读。

XML文档的解析

XML文档的解析通常来说有两种方式:

DOM:Document Object Model(文档对象模型)

具有代表性的工具包:JDOM , DOM4J , Jsoup(html)

1.将XML文档全部加载到内存中,形成一棵DOM树

2.通过DOM树来操作XML文档

3.优点:可以随机访问,方便修改

4.缺点:占用内存,速度慢

SAX:Simple API  for XML(XML的简单API)

具有代表性的工具包:DOM4J

1.逐行读取XML文档,并且触发事件(以事件的方式进行触发)

2.优点:速度快,占用内存少

3.缺点:只能读取,不能修改(读完之后不能回头来读所以不能改)

DOM4J示例

先来导个包 

    <dependencies>
<!--        日志门面用来生成日志-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.36</version>
        </dependency>
<!--        lombok工具包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
<!--        dom4j包用来解析XML-->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>
    </dependencies>

首先的有一个XML文件给我们解析,这是我的放在resource目录下的students.xml

<?xml  version="1.0"  encoding="GBK" ?>
<students>
    <student id="1">
        <name>张三</name>
        <age>20</age>
        <sex>男</sex>
    </student>
    <student id="2">
        <name>李四</name>
        <age>20</age>
        <sex>女</sex>
    </student>
</students>

这是我的测试代码 

package cn.wmm.xml;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import javax.xml.parsers.SAXParser;
import java.util.List;

@Slf4j
public class Test {
    @SneakyThrows//lombok注解,自动抛出异常
    public static void main(String[] args) {
        //创建读取器
        SAXReader reader = new SAXReader();
        //读取xml文档,返回Document对象,文件可能不存在,可能不是xml文件,可能不符合xml规范,会有异常
        Document doc = reader.read(ClassLoader.getSystemResourceAsStream("students.xml"));
        //获取根节点,在xml中所有的东西都是节点,里面可以输入节点,起到一个过滤的效果
        Element rootElement = doc.getRootElement();

        log.info(rootElement.getName());
        //获取根节点下的子节点(根节点的名称)
        List<Element>elements=rootElement.elements();
        //遍历子节点的名称
        for (Element element : elements) {
            //获取子节点的属性值
            Attribute attribute = element.attribute("id");
            //获取子节点的名称
            log.info("{} - {}",element.getName(),attribute.getValue());
            List<Element>list=element.elements();
            for (Element element1 : list) {
                log.info("{} - {}",element1.getName(),element1.getText());
            }
        }
    }
}

 以日志的方式在控制台打印了根节点的名字

 

这是运行结果XML文件的结构就出来了,这就是XML的基本读法。

因为我是用日志输出的,日志文件的配置也发一下,在resource目录下创建log4j.properties,必须要是这个名字,或者用xml的方式配置也行,我这里是用的properties的形式,好记一点,配置代码如下

#log4j.rootLogger=根日志级别,appender列表(用逗号隔开)
log4j.rootLogger=INFO,liuyunheyue


#控制台输出的相关设置
#指定appender的名称,这个名称可以随便取,但是后面的logger中要用到
#配置appender的权限类名
log4j.appender.liuyunheyue=org.apache.log4j.ConsoleAppender
#配置用谁输出,默认是System.out可以不用配
log4j.appender.liuyunheyue.Target=System.out
#配置输出的格式,%d表示日期,%p表示日志级别,%m表示日志内容,%n表示换行
log4j.appender.liuyunheyue.layout=org.apache.log4j.PatternLayout
log4j.appender.liuyunheyue.layout.ConversionPattern=%d %p [%c] - %m%n

XML的定义:

有两种方式,一种是dtd(具有基本功能,语法简单)

另一种是schema(功能强大,可读性好),这是微软开发的一套定义语言。

xmlns:XML namespace (命名空间)

这里我们了解dtd就可以了,有兴趣的同学可以去了解schema

<?xml  version="1.0"  encoding="GBK" ?>


<!DOCTYPE  students [
        <!ELEMENT students (student+)>
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student id CDATA #REQUIRED>
        ]>

<students>
    <student id="1">
        <name>张三</name>
        <age>20</age>
        <sex>男</sex>
    </student>
    <student id="2">
        <name>李四</name>
        <age>20</age>
        <sex>女</sex>
    </student>
</students>

太累了,不懂私聊

工具包解析JDOM与DOM4J与JSOUP

DOM4j和JDOM都是用于处理XML文档的Java库,它们之间的关系可以总结如下

  1. 共同点:

    • DOM4j和JDOM都是用于处理XML文档的Java库,它们都提供了一种更容易使用的API,以便于创建、解析和操作XML文档。
    • 它们都采用了树型数据模型,允许将整个XML文档表示为树结构,其中每个XML元素都是树的一个节点。
    • 它们都支持XPath,用于在XML文档中执行查询和导航操作。
    • 两者都提供了对XML元素、属性、命名空间等基本XML结构的访问和操作方法。
  2. 区别:

    • DOM4j是Apache基金会的项目,而JDOM是由JDOM项目组织开发和维护。这意味着它们有不同的开发和支持团队。
    • DOM4j是性能更高、内存占用更小的库,特别适用于处理大型XML文档。它的设计目标是提供高性能和低内存开销。
    • JDOM的设计目标是更容易使用和理解,因此在某些情况下可能更适合新手。它的性能通常被认为较低,因此对于处理大型文档可能不如DOM4j高效。
    • DOM4j有更多的高级功能,如XML Schema验证、XSLT转换等,所以它在某些特定需求下更有优势。
    • JDOM在某些方面更符合Java的编程模型,因此在Java社区中有一定的用户群体。

综上所述,DOM4j和JDOM都是处理XML的强大工具,选择使用哪个库通常取决于项目的具体需求和性能要求。如果你要有更高的性能和对高级XML功能的支持,就用DOM4j。如果你需要易用性和可读性,JDOM会更合适。一般来说大家都是用的DOM4J

另外一个就是JSOUP

Jsoup(发音为"jay-soup")是用于Java编程语言的开源HTML解析库。但是!!!,HTML是XML的子集,所以Jsoup也能用来也能用来解析XML。

可是可是但是,JSOUP提供的API主要是使开发者能够方便地从HTML文档中提取数据、操作HTML元素和执行Web抓取任务。Jsoup通常用于Web抓取、数据挖掘、数据提取、屏幕抓取以及HTML文档处理等任务,也就是我们所说的用来做网络爬虫

以下是Jsoup的一些主要功能和用法:

  1. HTML解析和文档处理:Jsoup可以加载HTML文档并将其解析为一个文档对象,使你能够轻松地遍历、查询和操作HTML元素和属性。

  2. 选择器引擎:Jsoup内置了一个强大的CSS选择器引擎,允许你使用CSS选择器语法来选择HTML元素。这使得从HTML文档中提取特定数据变得非常简单。

  3. 数据提取:你可以使用Jsoup选择器来从HTML文档中提取特定的文本、链接、图像等信息。

  4. HTML清洗:Jsoup可以用于清洗HTML文档,去除不需要的标签或属性,从而获得更干净的内容。

  5. Web抓取:Jsoup可以用于创建网络请求,发送HTTP请求,获取HTML响应,并对其进行解析和处理。这使得它成为一个强大的Web抓取工具。

  6. HTML生成:你还可以使用Jsoup创建HTML文档,添加元素、属性和文本内容,然后将其保存为HTML文件。

  7. 处理错误容忍度:Jsoup具有处理错误容忍度的能力,可以在解析不完整或破损的HTML时保持稳定。

  8. 支持国际化:Jsoup支持处理多种字符编码和国际化文本。

Jsoup是一款非常流行的HTML解析库,适用于各种Java项目,包括Web抓取器、爬虫、数据分析工具以及Web应用程序。如果你需要在Java中处理HTML文档或执行Web抓取任务,Jsoup是一个强大且易于使用的选择。它提供了广泛的文档和示例,可帮助你入门并掌握其用法。

想了解的同学可以移步我的JSOUP解析

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
GenICam是通用相机接口,它提供了一个统一的方式来访问和控制各种不同制造商的相机设备。XML(可扩展标记语言)是一种用于描述数据结构和传输格式的标记语言。 GenICam XML是用于描述相机特性和功能的XML文件。它定义了相机的属性、功能和可用的操作命令。通过解析和分析GenICam XML文件,应用程序可以了解相机的功能和如何操作相机。 GenICam XML文件包含相机的树状结构,其中顶层是相机设备节点,下面是各种相机特性和功能节点。每个节点都有一个唯一的名称和标识符。 在GenICam XML文件中,每个节点都可以具有一些属性和标签。属性描述节点的特性,例如节点的类型、访问权限、取值范围等。标签表示节点的子节点或属性。 通过解析GenICam XML文件,应用程序可以获取相机的属性、访问图像数据、进行拍摄设置和调整相机参数等。应用程序可以通过读取和修改XML文件中的节点和属性,定制相机的功能和行为。 GenICam XML提供了一个统一的方式来描述和控制不同制造商的相机设备,使得开发和集成相机更加简单和高效。不同相机厂商提供的GenICam XML文件可以在开发相机应用程序时使用相同的代码和接口。同时,GenICam XML也为相机的固件升级提供了支持,通过更新XML文件,可以升级相机的功能和特性。 总之,GenICam XML是一种用于描述相机特性和功能的标记语言,通过解析和分析XML文件,应用程序可以控制和定制相机的行为。通过提供一个统一的接口,GenICam XML简化了相机的开发和集成过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值