Tabla de contenido
1.2 Comprensión de los elementos de restricción
3. Principio de análisis y modelo estructural
4. Uso y métodos de DOM4J y XPath
1. Introducción a XML
XML: su nombre completo --- "Lenguaje de edición (etiqueta) extensible. Es un idioma independiente con sus propias reglas gramaticales . Es esencialmente un "archivo de texto sin formato". XML está diseñado para transmitir datos, no mostrar datos, y las etiquetas XML no están predefinidas, podemos definir las etiquetas por nosotros mismos
Dos, sintaxis XML
Los principales componentes de la sintaxis XML: declaración de documento, etiquetas, atributos, comentarios, caracteres de escape y área CDATA
1. Declaración del documento
formato:
<?xml version = “1.0(或者1.1)" encoding = “UTF-8" ?>
efecto:
La declaración del documento es para que la vean el editor y el analizador del archivo XML, y se utiliza para identificar la sintaxis de la versión y la codificación del XML.
Precauciones:
1. Un documento XML estándar generalmente se define en 0 filas y 0 columnas.
2. No se requiere la declaración del documento.
2. Etiqueta (elemento)
Etiquetas: también llamadas "etiquetas, elementos", son una parte importante de XML
formato:
1) Etiqueta completa: ----》 <nombre> James <nombre>
2) Etiqueta única (cierre automático y etiqueta) : ----》 <atributo del estudiante = "valor del atributo" edad = "18" /> sin cuerpo de etiqueta
Precauciones:
1) El nombre de la etiqueta solo puede contener: letras (incluido el chino), números y cuatro símbolos (_, -,:,.)
2) Los números y símbolos no pueden comenzar, y no puede haber "espacios" entre ellos [Intente comenzar en inglés y terminar en inglés, no lleve chino, números, símbolos, etc.]
3) Las etiquetas XML distinguen entre mayúsculas y minúsculas
4) Las etiquetas se pueden anidar
Ejemplo:
<students>
<student>
<name>张三</name>
</student>
</students>
3. Propiedades
formato:
Los atributos se pueden definir para cualquier etiqueta, las etiquetas completas solo se pueden escribir en la etiqueta de inicio, el cierre automático y las etiquetas no se pueden escribir después de /
Precauciones:
1) El valor del atributo debe estar entre comillas dobles o simples
2) Una etiqueta puede tener varios atributos, pero no puede tener el mismo nombre
3) Una etiqueta puede definir varios atributos, y cada atributo debe estar separado por "" espacio ""
<student id = “it001" name = “张三" age = “18" sex = “男"/>
4. Notas
formato:
<! - Contenido del comentario ->
Precauciones:
1) No se pueden escribir comentarios en el "nombre de la etiqueta"
2) El maestro no se puede anidar
<!-- 学员信息-->
<students>
<student>
<!-- 学员信息-->
<name>张三</name>
<age>19</age>
</student>
</student>
5. Área CDATA
En XML, hay algunos símbolos clave únicos, como (>, <, &, etc.). Este tipo de carácter es fácil de afectar la codificación de XML. Una forma de resolver este problema es utilizar el delimitador de conversión: varias conversiones de uso común. La definición es la siguiente:
Otra solución es escribir el contenido XML en el área CDATA :
Todo el contenido del área CDATA se considera texto sin símbolos especiales.
<![CDATA[
String str = “fjdsEFeafeEW1432”;
int count = 0;
for(int i = 0;i < str.length() ; i++){
char c = str.charAt(i);
if(c >= ‘0’ && c <= ‘9’){
count++;
}
}
System.out.println(“count = “ + count);
]]>
Tres, restricciones XML
Restricciones de XML: en nuestra aplicación de XML, XML debe tener algunas restricciones para estandarizar XML. En el proceso de solicitud, hay dos tipos de restricciones: una es restricción DTD y la otra es restricción de esquema.
Restricción DTD: pertenece a la restricción de la versión anterior, la sintaxis es simple, la función es relativamente única y es adecuada para algunos documentos pequeños y simples.
Restricción de esquema: pertenece a la restricción de nueva versión, con sintaxis compleja y funciones potentes. Adecuado para algunos documentos grandes y complejos
Las restricciones se pueden utilizar para restringir:
1) Las etiquetas que pueden aparecer en el documento 2) La relación de inclusión entre etiquetas
3) El orden en que aparecen las etiquetas 4) La frecuencia de las etiquetas, etc.
1. Restricciones DTD
1.1 Formato del documento
<?xml version="1.0" encoding="UTF-8" ?>
<!--
在需要使用此dtd的xml中引入约束
<!DOCTYPE 书架 SYSTEM "book.dtd">
-->
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)><!--约束元素书的子元素必须为书名、作者、售价-->
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
Utilice las siguientes declaraciones en XML para introducir restricciones:
<!DOCTYPE 书架 SYSTEM "book.dtd">
Entonces puede comenzar a escribir el contenido del archivo XML:
<?xml version="1.0" encoding="utf-8" ?><!--文档声明-->
<!DOCTYPE 书架 SYSTEM "book.dtd"><!--引入DTD约束-->
<书架>
<书>
<书名></书名>
<作者></作者>
<售价></售价>
</书>
</书架>
1.2 Comprensión de los elementos de restricción
<?xml version="1.0" encoding="UTF-8" ?>
<!--
在需要使用此dtd的xml中引入约束
<!DOCTYPE 书架 SYSTEM "book.dtd">
-->
<!ELEMENT 书架 (书+)><!--约束根元素是“书架”,“书架的子元素为书,”,“+”为数量词-->
<!ELEMENT 书 (书名,作者,售价)><!--约束元素书的子元素必须为书名、作者、售价-->
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
1.3 Tipo de etiqueta
Tipo de etiqueta | Escritura de código | Descripción |
PCDATA | (#PCDATA) | Datos de cadena interpretados |
VACÍO | VACÍO | Elemento vacio |
ALGUNA | ALGUNA | Cualquier tipo |
<!ELEMENT 售价 (#PCDATA)> <!--"售价"元素体为字符串数据-->
<!ELEMENT 出版日期 ANY> <!--"出版日期"元素体为任意类型-->
<!ELEMENT 版本号 EMPTY> <!--"版本号"元素体为空元素
1.4 Cuantificador
Cuantificador | sentido |
* | Los elementos pueden aparecer 0 ~ múltiples |
+ | Los elementos pueden aparecer 1 ~ múltiples |
? | Los elementos pueden ser 0 o 1 |
, | Los elementos se muestran en orden |
| | El elemento debe seleccionar uno de ellos. |
1.5 Declaración de propiedad
<!ATTLIST 标签名称
属性名称 属性类型 属性说明>
Tipo de atributo | sentido |
CDATA | El atributo es una cadena de texto |
CARNÉ DE IDENTIDAD | El valor del atributo es único y no puede comenzar con un número. |
ENUMERADO | Enumeración dentro del alcance de ejecución |
Descripción de propiedad | sentido |
#NECESARIO | El atributo debe tener |
#IMPLÍCITO | Los atributos son opcionales |
#FIJO | Valor fijo de la propiedad |
<!ATTLIST 书 <!--设置"书"元素的的属性列表-->
id ID #REQUIRED <!--"id"属性值为必须有-->
编号 CDATA #IMPLIED <!--"编号"属性可有可无-->
出版社 (清华|北大|传智播客) "传智播客" <!--"出版社"属性值是枚举值,默认为“传智播客”-->
type CDATA #FIXED "IT" <!--"type"属性为文本字符串并且固定值为"IT"-->
>
2. Restricciones del esquema
Gramática simple, presentada más adelante
2.1 Formato del documento
<?xml version="1.0" encoding="UTF-8" ?>
<!--
将注释中的以下内容复制到要编写的xml的声明下面
复制内容如下:
<书架 xmlns="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn bookshelf.xsd"
>
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.cn"
elementFormDefault="qualified">
<xs:element name='书架' >
<xs:complexType>
<xs:sequence maxOccurs='unbounded' >
<xs:element name='书' >
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string' />
<xs:element name='作者' type='xs:string' />
<xs:element name='售价' type='xs:double' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
restricción de schame: capaz de restringir el tipo de datos
Cuatro, análisis XML
1. Tres métodos analíticos
1. Análisis DOM: lea todo el contenido del documento en la memoria a la vez y genere un modelo de árbol DOM en la memoria.
[Ventajas: puede agregar o eliminar elementos. Desventajas: procesamiento lento y uso de memoria, solo apto para archivos pequeños]
2. Análisis SAX: lea una línea a la vez, analice una línea (solo lectura)
[Beneficios: procesamiento rápido, sin uso de memoria. Desventajas: no hay estructura de documento, por lo que no puede agregar ni eliminar el contenido del documento]
3. Análisis PULL: método de análisis de Android
2. Herramientas de análisis
1) Análisis de JAXP: la herramienta de análisis que viene con el JDK es primitiva y de bajo nivel, por lo que es inconveniente de usar
2) Análisis JSOUP: análisis de HTML (rastreador web)
3) Análisis JDOM: hermano de DOM4J, la función es relativamente débil, rara vez se usa
4) Análisis de DOM4J: una de las herramientas de análisis de XML más utilizadas, que combina internamente métodos de análisis de DOM y SAX
3. Principio de análisis y modelo estructural
Principio de análisis : XML DOM es lo mismo que HTML DOM. El archivo XML se carga en la memoria, se genera un árbol DOM y se obtiene un objeto Documento. El DOM se puede operar a través del objeto Documento.
Modelo de estructura:
4. Uso y métodos de DOM4J y XPath
Pasos de uso:
1) dom4j es un "paquete" de terceros
Enlace: https://pan.baidu.com/s/1SPxnd7yP_SsgygNKee9Qsw
Código de extracción: kcv62) Copie el paquete jar dom4j en el directorio del módulo, luego haga clic derecho para agregarlo a la biblioteca de clases (agregar como biblioteca)
4.1 Métodos comunes
método | efecto |
nuevo SAXReader | Crear un objeto saxreader (método de construcción) |
Documento leído (URL de cadena) | Cargar y ejecutar documento xml |
método | efecto |
Elemento getRootElement () | Obtener el elemento raíz |
método | efecto |
Lista de elementos <Element> ([String element]) | Obtenga los elementos secundarios del elemento raíz (puede especificar o no especificar el nombre del elemento raíz) |
Elemento elemento ([elemento de cadena]) | Obtenga el primer elemento secundario (puede especificar o no especificar el nombre del elemento) |
string getName () | Obtener el nombre del elemento actual |
string attributeValue (string attrName) | Obtener el valor de atributo del nombre de atributo especificado |
string elementText (string element) | Obtener el valor de texto del elemento de nombre especificado |
string getText () | Obtener el contenido de texto del elemento actual |
public class Test {
public static void main(String[] args) throws DocumentException {
//3、利用类加载器创建InputStream流对象
InputStream in = Test.class.getClassLoader().getResourceAsStream("books.xml");
//1、创建saxReader对象
SAXReader saxReader = new SAXReader();
//2、读取xml文件,获取DOM对象
Document document = saxReader.read(in);
//4、获取XML文件的根目录
Element rootElement = document.getRootElement();
//5、通过根元素对象获取子元素对象
List<Element> listElements = rootElement.elements();
//6、遍历子元素对象
for (Element listElement : listElements) {
//获取子元素的id属性名
/*Attribute name = listElement.attribute("id");
String value = name.getValue();
System.out.println(value);
*/
//获取子元素的子元素
// List<Element> elements = listElement.elements();
// // //遍历子元素集合
// for (Element childElement : elements) {
// //获取指定标签的文本数据
// // System.out.println(childElement.getText());//1
// // System.out.println(childElement.getStringValue());//2
// }
//3、根据名称获取元素
Element name = listElement.element("name");
//根据元素获取标签数据
String text = name.getText();
//输出值
System.out.println(text);
// 4、
// System.out.println(listElement.elementText("name"));
}
}
}
4.2 Uso de XPath
在DOM4J的基础上,在此导入jaxen-1.1-beta-6.jar包。
链接:https://pan.baidu.com/s/1Q5QgiVsdz-v1U-ThpC-gag
提取码:0lix
可以直接写出想要获取文本信息的路径,然后使用selectISingleNode就可以获取:
public class Test {
public static void main(String[] args) throws DocumentException {
//3、利用类加载器创建输出流对象
InputStream in = Test.class.getClassLoader().getResourceAsStream("books.xml");
//1、创建 Saxreader对象
SAXReader saxReader = new SAXReader();
//2、读取xml文件,获取DOM对象
Document document = saxReader.read(in);
//4、获取xml文件的根元素
Element rootElement = document.getRootElement();
//5、获取指定标签的文本数据
Node node = rootElement.selectSingleNode("/books/book/name");
//6、获取节点的文本数据并解析
System.out.println(node.getText());
}
}