Maison  >  Article  >  développement back-end  >  Programmation XML-DOM

Programmation XML-DOM

黄舟
黄舟original
2017-02-20 15:08:131348parcourir

XMLProgrammation-DOM

XML Technologie d'analyse


Il existe deux types de technologie d'analyse XML couramment utilisés : dom analyse et analyse sax.

dom : (Modèle objet de document, c'est-à-dire le modèle objet de document ) estW3C recommande une manière de gérer le XML.

sax

 : (API simple pour XML) n'est pas un standard officiel, mais c'est du XMLLe standard de facto dans la communauté, presque tous les analyseurs XML le supportent.

Jaxp

Introduction

Jaxp (API Java pour le traitement XML)

estJavaUn package de développement pour la programmation XML, qui se compose de javax.xml, org. Il se compose des packages w3c.dom , org.xml.sax et de leurs sous-packages.

Dans le package

javax.xml.parsers, plusieurs classes d'usine sont définies lorsque les programmeurs appellent ces classes d'usine, ils peuvent obtenir le . xml document analysé objet analyseur DOM ou SAX .

DOM

Aperçu de base

DOM (Document Object Model Document Object Model

), oui W3C Une interface de programmation standard pour gérer les langages de balisage extensibles recommandés par l'organisation. XML DOM définit les objets et attributs de tous les éléments XML , ainsi que les méthodes (interfaces) pour y accéder.

Schéma


DOM

Modèle(modèle d'objet de document)


Lorsque l'analyseur DOM

analyse le document XML, il analysera tous les éléments du document en NodeObjet(Nœud). Dans

dom

, la relation entre les nœuds est la suivante : 1

,

sont situés sur un node Le nœud est le nœud parent du nœud (parent)2

,

Le nœud en dessous d'un nœud est le nœud enfant du nœud (enfants )

3, Les nœuds de même niveau et avec le même nœud parent sont des nœuds frères (frère)

4 ,L'ensemble des nœuds au niveau suivant d'un nœud est le nœud descendant (descendant)

5, parent, nœuds grands-parents et tous ceux situés au dessus du nœud, sont l'Ancêtre du nœud (ancêtre)

Node objet

Node l'objet fournit un série de constantes pour représenter le type de nœud. Lorsque les développeurs obtiennent un certain type Node, ils peuvent convertir le nœud Node en nœud. objet nœud correspondant. (Objet de sous-classe de Node ) pour faciliter l'appel de ses méthodes uniques. (Voir la documentation API)

L'objet Node fournit les méthodes correspondantes pour obtenir son nœud parent ou son nœud enfant. Grâce à ces méthodes, les programmeurs peuvent lire le contenu de l'intégralité du document XML, ou ajouter, modifier ou supprimer le contenu du XML documenter.

PS : Sa sous-interface Element a plus de fonctions.

Obtenez l'analyseur DOMJaxp 🎜 >

1

, appelez la méthode DocumentBuilderFactory.newInstance() pour créer la fabrique de l'analyseur DOM.

2

, appelez la méthode newDocumentBuilder() de l'objet DocumentBuilderFactory pour obtenir DOMObjet Parser, qui est l'objet de DocumentBuilder.

3

, appelez DocumentBuilder la méthode parse() d'analyse Document XML, récupérez l'objet Document représentant l'intégralité du document.

4

, via les objets Document et certaines classes et méthodes associées, vers XML Document à exploiter.

Mise à jour du document

XML

javax.xml.transform

dans le package Le La classe Transformer est utilisée pour convertir l'objet Document représentant le fichier XML dans un certain format . Pour la sortie, par exemple, appliquez une feuille de style au fichier xml et convertissez-le en un document html. En utilisant cet objet, bien sûr, vous pouvez également réécrire l'objet Document dans un fichier XML.

La classe Transformer termine l'opération de transformation via la méthode transform, qui reçoit une source et une destination. On peut associer l'objet

document

à convertir via : javax.xml.transform.dom.DOMSource classe,

Utilisez l'objet javax.xml.transform.stream.StreamResult pour représenter la destination des données. L'objet

Transformer est obtenu via TransformerFactory.

Cas :

XML5.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><班级 班次="1班" 编号="C1">
	<学生 地址="湖南" 学号="n1" 性别="男" 授课方式="面授" 朋友="n2" 班级编号="C1">
		<名字>张三</名字>
		<年龄>20</年龄>
		<介绍>不错</介绍>
	</学生>
	<学生 学号="n2" 性别="女" 授课方式="面授" 朋友="n1 n3" 班级编号="C1">
		<名字>李四</名字>
		<年龄>18</年龄>

		<介绍>很好</介绍>
	</学生>
	<学生 学号="n3" 性别="男" 授课方式="面授" 朋友="n2" 班级编号="C1">
		<名字>王五</名字>
		<年龄>22</年龄>
		<介绍>非常好</介绍>
	</学生>
	<学生 性别="男">
		<名字>小明</名字>
		<年龄>30</年龄>
		<介绍>好</介绍>
	</学生>
</班级>


package com.pc;

import java.awt.List;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * 
 * @author Switch
 * @function Java解析XML
 * 
 */
public class XML5 {
	// 使用dom技术对xml文件进行操作
	public static void main(String[] args) throws Exception {
		// 1.创建一个DocumentBuilderFactory对象
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
				.newInstance();
		// 2.通过DocumentBuilderFactory,得到一个DocumentBuilder对象
		DocumentBuilder documentBuilder = documentBuilderFactory
				.newDocumentBuilder();
		// 3.指定解析哪个xml文件
		Document document = documentBuilder.parse("src/com/pc/XML5.xml");
		// 4.对XML文档操作
		// System.out.println(document);
		// list(document);
		// read(document);
		// add(document);
		// delete(document, "小明");
		update(document, "小明", "30");
	}

	// 更新一个元素(通过名字更新一个学生的年龄)
	public static void update(Document doc, String name, String age)
			throws Exception {
		NodeList nodes = doc.getElementsByTagName("名字");
		for (int i = 0; i < nodes.getLength(); i++) {
			Element nameE = (Element) nodes.item(i);
			if (nameE.getTextContent().equals(name)) {
				Node prNode = nameE.getParentNode();
				NodeList stuAttributes = prNode.getChildNodes();
				for (int j = 0; j < stuAttributes.getLength(); j++) {
					Node stuAttribute = stuAttributes.item(j);
					if (stuAttribute.getNodeName().equals("年龄")) {
						stuAttribute.setTextContent(age);
					}
				}
			}
		}
		updateToXML(doc);
	}

	// 删除一个元素(通过名字删除一个学生)
	public static void delete(Document doc, String name) throws Exception {
		// 找到第一个学生
		NodeList nodes = doc.getElementsByTagName("名字");
		for (int i = 0; i < nodes.getLength(); i++) {
			Node node = nodes.item(i);
			if (node.getTextContent().equals(name)) {
				Node prNode = node.getParentNode();
				prNode.getParentNode().removeChild(prNode);
			}
		}

		// 更新到XML
		updateToXML(doc);
	}

	// 添加一个学生到XML文件
	public static void add(Document doc) throws Exception {
		// 创建一个新的学生节点
		Element newStu = doc.createElement("学生");
		newStu.setAttribute("性别", "男");
		Element newStu_name = doc.createElement("名字");
		newStu_name.setTextContent("小明");
		Element newStu_age = doc.createElement("年龄");
		newStu_age.setTextContent("21");
		Element newStu_intro = doc.createElement("介绍");
		newStu_intro.setTextContent("好");
		newStu.appendChild(newStu_name);
		newStu.appendChild(newStu_age);
		newStu.appendChild(newStu_intro);
		// 把新的学生节点添加到根元素
		doc.getDocumentElement().appendChild(newStu);

		// 更新到XML
		updateToXML(doc);

	}

	// 更新到XML
	private static void updateToXML(Document doc)
			throws TransformerFactoryConfigurationError,
			TransformerConfigurationException, TransformerException {
		// 得到TransformerFactory对象
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		// 通过TransformerFactory对象得到一个转换器
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(doc), new StreamResult(
				"src/com/pc/XML5.xml"));
	}

	// 具体查询某个学生的信息(小时第一个学生的所有)
	public static void read(Document doc) {
		NodeList nodes = doc.getElementsByTagName("学生");
		// 取出第一个学生
		Element stu1 = (Element) nodes.item(0);
		Element name = (Element) stu1.getElementsByTagName("名字").item(0);
		System.out.println("姓名:" + name.getTextContent() + " 性别:"
				+ stu1.getAttribute("性别"));
	}

	// 遍历该XML文件
	public static void list(Node node) {
		if (node.getNodeType() == node.ELEMENT_NODE) {
			System.out.println("名字:" + node.getNodeName());
		}
		// 取出node的子节点
		NodeList nodes = node.getChildNodes();
		for (int i = 0; i < nodes.getLength(); i++) {
			// 显示所有子节点
			Node n = nodes.item(i);
			list(n);
		}
	}

}

Ce qui précède est le contenu de la programmation XML-DOM. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn