【XML探讨XML语法、解析与XPath应用

2023年 10月 15日 96.5k 0

一、前言

在编程中,XML(可扩展标记语言)是一种常用于存储和交换数据的标记语言,它具有良好的人机可读性和通用性。在本文中,我们将探讨XML的各个方面,包括XML的介绍与用途、语法规则、语义约束、Java中的XML解析以及XPath路径表达式。

二、内容

2.1 XML介绍与用途

什么是 XML

XML的全称是EXtensible Markup Language,可扩展标记语言。与HTML类似,XML也是通过标签来描述数据的格式和结构,但XML更加通用,不仅用于网页,还用于数据的存储和交换。

XML示例:



  王五
  18
  170

XML vs HTML

XMLHTML 都使用标签来描述文档结构,但它们有一些关键区别:


 
    大二
    5班


    大二
    6班

 

 首页

主要区别:

  • XML是通用的数据描述语言,而HTML用于呈现文档。
  • XML强调数据的结构和内容,而HTML强调文档的呈现和布局

2.2 XML的语法规则

XML 文档结构

XML文档必须遵循一定的结构规则:

  • 第一行必须是XML声明,包含版本号和字符集信息。
  • XML文档有且只有一个根节点。
  • XML标签的书写规则与HTML相同。

XML 声明

XML 声明说明 XML文档 的基本信息,包括版本号与字符集,写在 XML第一行。


其中:

  • version 代表版本号,可以是 1.0 或 1.1
  • encoding UTF-8 设置字符集,用于支持中文

合法的标签名

XML 标签名必须遵循一些规则:

abc 
数学期末 
班级 
照片 

适当的注释与缩进

为了提高XML文档的可读性,建议使用注释和缩进:



  王五
  18
  180

合理使用属性

XML标签可以包含属性,用于提供额外的信息:


  Chapter 1

处理特殊字符

在标签体中出现 "" 等特殊字符可能会破坏文档结构,需要特殊处理:

解决方案:

  • 使用实体引用。

    可以使用实体引用来代替特殊字符:

    实体引用 对应符号 说明
    < 大于
    & & 和号
    ' ' 单引号
    " " 双引号
  • 使用CDATA标签。

    CDATA标签用于包含不应由XML解析器解析的文本数据:

    比如:

    bold text.]]>
    
  • 有序的子元素

    在多层嵌套的子元素中,标签的前后顺序应保持一致,以维护数据的结构完整性。

    2.3 XML语义约束

    XML文档结构正确,但可能不是有效的。XML语义约束用于规定XML文档中允许出现哪些元素。

    例如,员工档案 XML 中绝不允许出现”植物品种” 标签。XML语义约束就是用于规定 XML 文档中允许出现哪些元素。

    XML语义约束有两种定义方式:DTDXML Schema

    Document Type Definition

    DTDDocument Type Definition,文档类型定义)是一种简单的语义约束方式,用于规定XML文档的结构。

    DTD 文件的扩展名为 .dtd

    比如:

    
    
    
    
    ...
    
    DTD 定义节点

    利用 DTD 中的标签,我们可以定义 XML 文档中允许出现的节点及其数量。

    比如:

    • 定义 hr 节点下只允许出现 1employee 子节点:
    
    
    • employee 节点下必须包含 nameagesalarydepartment节点,并按顺序出现:
    
    
    • 定义 name 标签体只能是文本,#PCDATA 代表文本元素:
    
    

    DTD 定义节点数量

    如某个子节点需要多次重复出现,则需要在子节点后增加相应的描述符:

    • hr 节点下最少出现 1 个 employee 子节点。
    
    
    • hr 节点下可出现 0...nemployee子节点。
    
    
    • hr 节点下最多出现 1 employee 子节点。
    
    

    XML 引用 DTD 文件

    XML 中使用 标签来引用 DTD 文件。

    书写格式如下:

    
    

    举个例子:

    
    

    XML Schema

    XML Schema(XML模式)是一种用于定义XML文档结构和数据类型的替代DTD的方案。与DTD相比,XML Schema提供了更强大和灵活的工具来描述XML文档的结构和语义。

    XML Schema支持丰富的数据类型,如字符串、整数、日期、布尔值等。允许我们定义更复杂的数据约束,如最小值、最大值、正则表达式模式等。同时, XML Schema文档本身是一个XML文档,因此具有更好的自描述性,提供了更强大的命名空间支持,并允许我们定义元素和属性的子元素、顺序、出现次数等规则,从而更精确地描述文档结构。

    举个例子:

    
    
      
        
        
          
            
              
                
                  
                  
                    
                      
                        
                        
                      
                    
                  
                  
                  
                    
                      
                        
                        
                      
                    
                  
                
                
              
            
          
        
      
    
    

    这个XML Schema为XML文档定义了严格的结构和数据类型规则,确保XML文档符合人力资源管理系统的要求。XML文档必须遵循这些规则,否则将被视为无效。

    2.4 Java 解析 XML

    DOM 文档对象模型

    DOM是一种用于解析XML的模型,将XML文档视为树形结构,可以方便地遍历和修改XML文档。

    Dom4j

    Dom4j是一个开源的Java库,用于解析和操作XML文档。它易于使用,性能优异,并提供了丰富的功能。

    • Dom4j 将 XML 视为 Document 对象。
    • XML 标签被 Dom4j 定义为 Element 对象。

    利用 Dom4j 遍历 XML

    // 导入Dom4j相关类
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.DocumentException;
    import org.dom4j.io.SAXReader;
    
    public class XMLParser {
      public static void main(String[] args) {
        try {
          // 创建SAXReader对象
          SAXReader reader = new SAXReader();
          // 读取XML文件
          Document document = reader.read("hr.xml");
          // 获取根节点
          Element root = document.getRootElement();
          
          // 遍历子元素
          for (Element employee : root.elements("employee")) {
            String name = employee.elementText("name");
            String age = employee.elementText("age");
            System.out.println("Name: " + name + ", Age: " + age);
          }
        } catch (DocumentException e) {
          e.printStackTrace();
        }
      }
    }
    

    利用 Dom4j 更新 XML

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    public class XMLUpdater {
      public static void main(String[] args) {
        try {
          // 创建空的XML文档
          Document document = DocumentHelper.createDocument();
          // 创建根节点
          Element root = document.addElement("employees");
          
          // 创建子节点
          Element employee = root.addElement("employee");
          employee.addElement("name").setText("李四");
          employee.addElement("age").setText("25");
          
          // 将XML写入文件
          XMLWriter writer = new XMLWriter(new FileWriter("new_hr.xml"));
          writer.write(document);
          writer.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    

    2.5 XPath 路径表达式

    XPath 路径表达式

    XPath是一种用于在XML文档中查找数据的语言,它允许通过路径表达式定位XML文档中的元素。

    • 掌握 XPath 可以极大的提高在提取数据时的开发效率。
    • 学习 XPath 本质就是掌握各种形式表达式的使用技巧。

    XPath 基本表达式

    最常用的基本表达式:

    • /:从根节点开始选取
    • //:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
    • element:选取指定名称的元素
    • @attribute:选取指定名称的属性
    • text():选取元素的文本内容

    XPath 基本表达式案例

    比如:

    
      
        XML Basics
        John Doe
      
      
        Java Programming
        Jane Smith
      
    
    

    示例XPath表达式:

    • /books:选取根元素books
    • /books/book:选取根元素下的book元素
    • //author:选取所有author元素
    • /books/book[1]:选取第一个book元素
    • /books/book/title/text():选取第一个book元素的 title 文本内容

    XPath 谓语表达式

    谓语表达式用于过滤元素,可以根据条件来选择元素:

    比如:

    • /books/book[author='John Doe']:选取作者为'John Doe'的book元素
    • /books/book[price>20]:选取价格大于20的book元素

    三、总结

    本文介绍了XML的各个方面,包括XML的基本介绍与用途、语法规则、语义约束、Java中的XML解析以及XPath路径表达式。总的来说,XML是一种强大的数据交换格式,掌握它将有助于处理和管理各种数据源。

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论