• 【Java 进阶篇】使用 Java 和 Jsoup 进行 XML 处理


    在这里插入图片描述

    XML(可扩展标记语言)是一种常用的数据交换格式,它被广泛用于在不同系统之间传递和存储数据。Java作为一种强大的编程语言,提供了多种方式来处理XML数据。其中,Jsoup 是一个流行的Java库,用于解析和操作XML文档。本篇博客将详细介绍如何使用Java和Jsoup来处理XML数据,无论您是初学者还是有一定经验的开发者,都能受益匪浅。

    什么是 Jsoup?

    Jsoup 是一个用于解析HTML和XML文档的Java库。尤其在网页抓取、数据提取和文档处理方面非常强大。它提供了一种简单的方式来遍历、搜索和修改文档树,使得XML处理变得非常容易。除了XML,Jsoup还支持HTML5,因此您可以用它来处理网页数据。

    安装 Jsoup

    要开始使用 Jsoup,您需要将它的库文件添加到您的Java项目中。您可以从 Jsoup 的官方网站上下载最新的jar文件,然后将它添加到您的项目的类路径中。

    如果您使用 Maven 作为项目构建工具,只需在您的 pom.xml 文件中添加以下依赖:

    <dependency>
        <groupId>org.jsoupgroupId>
        <artifactId>jsoupartifactId>
        <version>1.14.3version> 
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    现在,让我们开始使用 Jsoup 来处理 XML 数据。

    使用 Jsoup 解析 XML

    在这个示例中,我们将使用 Jsoup 来解析一个简单的 XML 文档。我们的 XML 文档如下:

    
    <bookstore>
        <book>
            <title>Java Programmingtitle>
            <author>John Doeauthor>
            <price>29.99price>
        book>
        <book>
            <title>Web Development with Jsouptitle>
            <author>Jane Smithauthor>
            <price>19.95price>
        book>
    bookstore>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    让我们从头开始,首先导入 Jsoup 和其他必要的类:

    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    • 1
    • 2
    • 3
    • 4

    然后,我们将加载上面的 XML 文档:

    public class XmlParsingExample {
        public static void main(String[] args) {
            String xml = "" +
                         "" +
                         "    " +
                         "        Java Programming" +
                         "        John Doe" +
                         "        29.99" +
                         "    " +
                         "    " +
                         "        Web Development with Jsoup" +
                         "        Jane Smith" +
                         "        19.95" +
                         "    " +
                         "";
    
            Document doc = Jsoup.parse(xml);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    现在,doc 包含了整个 XML 文档的内容。我们可以使用 Jsoup 来轻松地遍历和操作这个文档。

    获取根元素

    要获取根元素,我们可以使用 docselect 方法并传入根元素的标签名,通常是 “bookstore”。

    Element rootElement = doc.select("bookstore").first();
    
    • 1

    获取子元素

    要获取子元素,我们可以使用 select 方法并传入子元素的标签名,如 “book”。

    Elements bookElements = rootElement.select("book");
    
    • 1

    获取元素内容

    要获取元素的文本内容,我们可以使用 text() 方法。

    String title = bookElement.select("title").text();
    String author = bookElement.select("author").text();
    String price = bookElement.select("price").text();
    
    • 1
    • 2
    • 3

    现在,我们已经成功解析了 XML 数据并提取了相关信息。

    使用 Jsoup 修改 XML

    除了解析,Jsoup 也允许我们修改 XML 文档。例如,我们可以添加、修改或删除元素。让我们看一个添加新书籍的例子。

    假设我们想要添加一本新书到我们的 XML 文档中。首先,我们创建一个新的 Element,设置它的标签名和文本内容:

    Element newBook = new Element("book");
    newBook.appendChild(new Element("title").text("Data Structures in Java"));
    newBook.appendChild(new Element("author").text("Alice Johnson"));
    newBook.appendChild(new Element("price").text("24.95"));
    
    • 1
    • 2
    • 3
    • 4

    然后,我们将这本新书添加到根元素中:

    rootElement.appendChild(newBook);
    
    • 1

    最后,我们可以将整个文档转换为字符串:

    String updatedXml = doc.outerHtml();
    
    • 1

    updatedXml 包含了已更新的 XML 数据。

    使用 Jsoup 查询元素

    Jsoup 还提供了强大的元素查询功能,允许您根据各种条件来查找和选择元素。这对于从复杂的XML文档中提取特定数据非常有用。以下是一些常用的查询方法:

    • 通过标签名查询元素:

      Elements elements = doc.select("tagname");
      
      • 1
    • 通过类名查询元素:

      Elements elements = doc.select(".classname");
      
      • 1
    • 通过属性查询元素:

      Elements elements = doc.select("[attribute=value]");
      
      • 1
    • 通过多种条件组合查询元素:

      Elements elements = doc.select("tagname.classname[attribute=value]");
      
      • 1

    让我们通过一个示例来演示如何使用 Jsoup 查询元素。假设我们要找到所有价格低于 25 的书籍:

    Elements cheapBooks = doc.select("book:has(price:matchesOwn(\\d+\\.\\d+))");
    
    • 1

    在上述示例中,我们使用 select 方法并传入查询条件 "book:has(price:matchesOwn(\\d+\\.\\d+))"。这个条件的含义是查找标签名为 “book” 的元素,其中包含名为 “price” 的元素,且价格匹配正则表达式 \\d+\\.\\d+,即匹配价格为小数形式的书籍。

    然后,我们可以遍历 cheapBooks 集合来获取满足条件的书籍元素,以便进一步处理它们。

    使用 Jsoup 处理 HTML

    虽然本篇博客主要关注 XML 处理,但是 Jsoup 也是一种出色的 HTML 处理工具。它允许您解析和操作网页,从中提取有用的信息。

    以下是一个简单的示例,演示如何使用 Jsoup 解析 HTML 页面并提取页面中的超链接:

    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import java.io.IOException;
    
    public class HtmlParsingExample {
        public static void main(String[] args) {
            String url = "https://example.com"; // 替换为您要解析的网页地址
    
            try {
                Document doc = Jsoup.connect(url).get();
                Elements links = doc.select("a[href]");
    
                for (Element link : links) {
                    String href = link.attr("href");
                    String text = link.text();
                    System.out.println("Link: " + text + " (" + href + ")");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这个示例中,我们使用 Jsoup.connect(url).get() 来下载指定网页的内容,然后使用 select 方法查找所有带有 href 属性的超链接。最后,我们遍历链接并提取链接的文本和 URL。

    高级用法

    Jsoup 还提供了许多高级功能,允许您进行更复杂的文档操作,包括:

    • 处理表单数据:Jsoup 允许模拟表单提交和处理表单数据。

    • 处理Cookie:您可以设置和处理Cookie来模拟用户会话。

    • 处理文件上传:Jsoup 可以用于上传文件到Web服务器。

    • 处理响应数据:您可以使用 Jsoup 处理来自Web服务器的响应数据,例如处理 JSON 或 XML 数据。

    • 爬取网页:Jsoup 在网页抓取方面非常有用,您可以编写爬虫来提取网站上的信息。

    • 过滤和清理HTML:Jsoup 允许您清理和过滤HTML,以防止跨站脚本攻击。

    安全注意事项

    当使用 Jsoup 处理来自不受信任源的数据时,请谨慎处理,以防止安全漏洞。Jsoup 有一些防范跨站脚本攻击(XSS)的功能,但您仍然需要小心处理来自用户的数据,以避免潜在的漏洞。

    总结

    本篇博客介绍了如何使用 Java 和 Jsoup 来解析和处理XML数据。我们了解了如何加载、解析和操作XML文档,以及如何使用查询和选择功能来提取特定元素。此外,我们还提到了如何使用 Jsoup 处理HTML页面,以及一些高级用法和安全注意事项。

    无论您是处理XML数据、抓取网页信息还是进行数据清理,Jsoup 都是一个功能强大且易于使用的工具。希望这篇博客对您有所帮助,让您更好地掌握如何在Java中处理XML和HTML数据。如果您有任何问题或需要进一步的指导,请随时提问。祝您在XML和HTML数据处理中取得成功!

    作者信息

    作者 : 繁依Fanyi
    CSDN: https://techfanyi.blog.csdn.net
    掘金:https://juejin.cn/user/4154386571867191
  • 相关阅读:
    i.MX 6ULL 驱动开发 二十七:块设备
    判断文件为文本文件还是二进制文件
    安卓studio插件开发(一)本地搭建工程
    混合开发架构|原生&Flutter通信
    视频转换软件哪个好?万兴优转-支持超过1000种格式转换和输出
    STM32F103实现激光测距传感器测距WT-VL53L0 L1
    DirectX12_Windows_GameDevelop_3:Direct3D的初始化
    ARMday06(总线、串口、RCC章节分析)
    【Ceph Cluster】完全删除Ceph集群
    MySQL-锁分类-2
  • 原文地址:https://blog.csdn.net/qq_21484461/article/details/134023115