Explicación detallada del análisis XML

Software de compilación: IntelliJ IDEA 2019.2.4 x64
Versión del paquete DOM4J: dom4j-1.6.1



1. ¿Qué es XML?

XML es un lenguaje de marcado, el nombre completo es Extensible Markup Language (Lenguaje de marcado extensible), que se utiliza para describir la estructura y el contenido de los datos . Se puede utilizar para representar varios tipos de datos, como texto, números, imágenes, etc.

XML está diseñado para facilitar el intercambio y el intercambio de datos, y también se puede utilizar para el almacenamiento y la transmisión de datos . Un documento XML consta de etiquetas, atributos y contenido de texto, y se puede validar mediante una DTD (Definición de tipo de documento) o un esquema XML. La sintaxis de XML es simple y flexible, y se usa ampliamente en campos como servicios web, intercambio de datos y archivos de configuración.


En segundo lugar, ¿cómo reflejar la escalabilidad del lenguaje XML?

¿Qué es extensible? Como sugiere el nombre, significa que se pueden agregar nuevas funciones sobre la base original. Pero en el lenguaje XML, aunque el significado es más o menos el mismo, una formulación más precisa es:虽然XML语言允许我们可以自由定义格式,但并非可以随便乱写,而是要遵从具体的XML约束。

Estas restricciones están definidas por diferentes organizaciones, y diferentes organizaciones definen diferentes restricciones.

Por ejemplo, en Java EE, nuestro archivo web-xml común se usa principalmente para describir la información de implementación y la configuración de las aplicaciones web de Java. Con él, los desarrolladores pueden concentrarse más en la implementación de la lógica empresarial. La organización que lo define es la comunidad Java Community Process (JCP) Si desea editar el archivo web-xml, debe seguir los archivos de restricciones específicos formulados por la organización.

Lo mismo ocurre con otras herramientas de terceros. Defina sus propias restricciones sobre la base de la especificación de sintaxis básica de XML para hacer cumplir lo que se puede y no se puede escribir en el archivo de configuración. Como se muestra abajo.

inserte la descripción de la imagen aquí


3. ¿Para qué se utiliza principalmente XML?

usar:

  • ①异步系统之间进行数据传输的媒介(现在json已经代替了该功能)

    Que significa Es decir, si desea transferir datos entre programas Java, programas python y programas c ++, puede usarlo como un soporte para almacenar datos y transferirlos.

  • ②作为配置文件使用

    ¿Qué es un archivo de configuración? Los archivos de configuración son archivos con formatos especiales que se utilizan para proporcionar parámetros de configuración y ajustes de inicialización para las aplicaciones. Por ejemplo, el grupo de conexiones de druida en jdbc utiliza archivos de propiedades como archivos de configuración.


Cuarto, la sintaxis básica de XML

XML的基本语法主要由标签、元素、属性和文本内容等语法规范,文档声明(Document Declaration)以及可选的约束文件(例如DTD或XSD)组成

4.1 Especificación gramatical

  • etiqueta raíz

Solo puede haber una etiqueta raíz.

  • pestaña cerrada
    • Etiquetas dobles : la etiqueta de inicio y la etiqueta final deben aparecer en pares.
    • Pestaña única : una pestaña única se cierra dentro de una etiqueta.
  • anidamiento de etiquetas
    • Se puede anidar, pero no anidar de forma cruzada .
  • Los comentarios no se pueden anidar
  • Se recomienda utilizar letras minúsculas para nombres de etiquetas y nombres de atributos.
  • Atributos
    • el atributo debe tener un valor
    • Los valores de los atributos deben ir entre comillas, ya sean simples o dobles

pd: La especificación gramatical anterior es completamente coherente con la especificación del lenguaje HTML, que es muy fácil de usar.

4.2 Declaración de documentos

La declaración del documento especifica la versión XML y la información del juego de caracteres, y generalmente se encuentra en la primera línea del documento XML.

Por ejemplo el siguiente código:

//定义该xml文件的版本为1.0,字符集编码为utf-8
<?xml version="1.0" encoding="UTF-8"?>

4.3 Archivo de restricciones

Los archivos de restricciones definen la estructura y las normas de los documentos XML para garantizar la validez y coherencia de los documentos XML. Incluye principalmente DTD y Schema.

Cabe señalar que, aunque el archivo de restricciones es una parte importante de XML, no es una parte necesaria de la sintaxis básica. En algunos casos, los desarrolladores pueden optar por no utilizar archivos de restricciones, sino confiar únicamente en la estructura y la relación lógica del propio documento XML para realizar la verificación y el procesamiento de datos.


5. ¿Cómo analizar XML? (Tome Java como ejemplo)

efecto:

Leer datos en xml con código Java

paso:

① Prepare un archivo XML para analizar y personalizar el contenido

La demostración del código es la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!--  没有约束文件,标签名和属性你想怎么写就怎么写  -->
<employees>
    <employee id="101">
        <name>张三</name>
        <age>18</age>
        <address>北京</address>
    </employee>
    <employee id="102">
        <name>李思思</name>
        <age>22</age>
        <address>武汉</address>
    </employee>
    <employee id="103">
        <name>王五</name>
        <age>32</age>
        <address>上海</address>
    </employee>

</employees>

②Importe el paquete DOM4J ( ) en el proyecto DOM4J是一个Java的XML解析库y use IDEA para escribir códigos relacionados.
inserte la descripción de la imagen aquí

PD: Los pasos para importar el paquete del proyecto son los mismos que para importar el paquete Juniite, por lo que no entraré en detalles aquí. Si tiene alguna pregunta, puede consultar este blog "Java SE: Guía de inicio rápido de JUnit " .

a. Crear para comenzar a crear el objeto analizador xml

```java
  //1.创建解析器对象
  SAXReader reader=new SAXReader();
```

b. Deje que el objeto analizador analice el archivo xml

	```java
	//解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
	Document document = reader.read(domTest.class.getClassLoader().getResourceAsStream("employees.xml"));
	```

c. Empezar a buscar contenido

```java
 //获取根节点对象
 Element rootElement = document.getRootElement();
 
 //在xml文件里自根节点下如果有多个同名节点的元素,默认找第一个,这里返回第一个employee
 Element employee = rootElement.element("employee");

 //从employee元素下找名称为name的标签
 Element name = employee.element("name");

 //获取标签name的内容	
 System.out.println("name中的内容:"+name.getText());


 //获取子标签(每一个element元素)下的标签name的标签体
 List<Element> elements = rootElement.elements();
 for (Element element : elements) {
     //获取每一个element元素下的标签name的标签体
      System.out.println(element.element("name").getText());
  }

//获取第一个employee元素的属性id的值
//获取第一个employee元素
Element element1 = rootElement.element("employee");

//获取属性对象id
Attribute id = element1.attribute("id");

//获取属性对象id的值,然后赋给value
String value = id.getValue();
System.out.println("id:"+value);//打印属性id的值

```

Caso: En el archivo employee.xml recién creado, use Java para obtener el cuerpo de la etiqueta del nombre de la etiqueta en la primera subetiqueta del empleado, el cuerpo de la etiqueta del nombre de la etiqueta en todas las subetiquetas del empleado y la primera subetiqueta empleado El valor del atributo de la identificación del atributo

El código completo del caso es el siguiente (ejemplo):

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;

public class domTest {
    
    
    public static void main(String[] args) {
    
    
        //1.创建解析器对象
        SAXReader reader=new SAXReader();

        try {
    
    

            //写法1获取根标签对象
            Document document = reader.read(domTest.class.getClassLoader().getResourceAsStream("employees.xml"));


       /*
            //写法2获取根标签对象
            File file=new File("E:\\javaApp\\day04_xml\\src\\employees.xml");
            FileInputStream fis=new FileInputStream(file);
            Document document = reader.read(fis);
       */

            Element rootElement = document.getRootElement();//获取根节点对象
            Element employee = rootElement.element("employee");//在xml文件里自根节点下如果有多个同名节点的元素,默认找第一个,这里返回第一个employee
            Element name = employee.element("name");//从employee节点下找名称为name的标签
            System.out.println("name中的内容:"+name.getText());//获取标签name的内容

            System.out.println("-------------------------");
            //获取子标签(每一个element元素)下的标签name的标签体
            List<Element> elements = rootElement.elements();
            for (Element element : elements) {
    
    
                //获取每一个element元素下的标签name的标签体
                System.out.println(element.element("name").getText());
            }


            System.out.println("---------------------------");
            Element element1 = rootElement.element("employee");//获取第一个employee
            Attribute id = element1.attribute("id");//获取属性对象id
            String value = id.getValue();//将属性对象id的值赋给value
            System.out.println("id:"+value);//打印属性id的值

        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
}

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/siaok/article/details/130034863
Recomendado
Clasificación