> 백엔드 개발 > XML/RSS 튜토리얼 > XML 프로그래밍-DOM

XML 프로그래밍-DOM

黄舟
풀어 주다: 2017-02-20 15:08:13
원래의
1390명이 탐색했습니다.

XML 프로그래밍-DOM

XML 파싱 기술


xml에는 일반적으로 사용되는 두 가지 유형이 있습니다.파싱 기술: dom 구문 분석 및 sax 구문 분석.

dom: (문서 객체 모델, 즉, 문서 객체 모델 )W3C 조직에서는 XML을 처리하는 방법을 권장합니다.

sax: (Simple API for XML)은 공식 표준은 아니지만 XML커뮤니티의 사실상 표준이며 거의 모든 XML 파서가 이를 지원합니다.

Jaxp

소개

Jaxp(XML 처리용 Java API)

JavaXML 프로그래밍을 위한 개발 패키지로, javax.xml, org로 구성됩니다. w3c.dom , org.xml.sax 패키지와 해당 하위 패키지로 구성됩니다.

javax.xml.parsers 패키지에는 프로그래머가 이러한 팩토리 클래스를 호출하면 을 얻을 수 있는 여러 팩토리 클래스가 정의되어 있습니다. xml 문서를 파싱한 DOM 또는 SAX 파서 객체.

DOM

기본 개요

DOM(Document Object Model Document Object Model

), 예 W3C 조직에서 권장하는 확장 가능한 마크업 언어를 처리하기 위한 표준 프로그래밍 인터페이스입니다. XML DOM 은 모든 XML 요소의 객체와 속성은 물론 이에 액세스하는 메서드(인터페이스)를 정의합니다.

개략도


DOM

모델(문서 객체 모델)


DOM

파서는 XML 문서를 파싱할 때 문서의 모든 요소를 ​​개별 노드객체(노드).

dom

에서는 노드 간의 관계는 다음과 같습니다. 1

,

은 하나의 노드에 위치합니다. 노드 노드는 노드 (부모)2

의 상위 노드입니다.

노드 아래의 노드는 노드의 하위 노드(자식)입니다. )

3, 같은 수준에 있고 같은 상위 노드를 가진 노드는 형제 노드입니다(sibling)

4 ,노드의 다음 단계에 설정된 노드는 노드 자손(descendant)

5, 부모, 조부모 노드 및 그 위에 있는 모든 노드입니다. 노드는 노드 (조상)

Node 객체

Node 객체의 조상입니다. 개발자가 특정 Node 유형을 얻으면 Node 노드를 해당 노드로 변환할 수 있습니다. node 객체 (Node의 하위 클래스 객체 )를 사용하여 고유한 메서드를 쉽게 호출할 수 있습니다. (API 문서 참조)

Node 객체는 상위 노드 또는 하위 노드를 가져오는 해당 메서드를 제공합니다. 이러한 방법을 통해 프로그래머는 XML 문서 전체의 내용을 읽거나, XML 문서.

PS: 하위 인터페이스 요소에 더 많은 기능이 있습니다.

DOM 파서Jaxp

에서 가져오기 🎜 >1,

DocumentBuilderFactory.newInstance() 메서드를 호출하여 DOM 파서의 팩토리를 만듭니다. 2

,

DocumentBuilderFactory 객체의 newDocumentBuilder() 메소드를 호출하여 DOMParser 개체,DocumentBuilder의 개체입니다. 3

,

DocumentBuilder 객체의 parse() 메서드 구문 분석 호출 XML 문서에서 전체 문서를 나타내는 Document 개체를 가져옵니다. 4

,

Document 객체와 일부 관련 클래스 및 메소드를 통해 XML 운영할 문서입니다.

업데이트된

XML

문서 javax.xml.transform

패키지

Transformer 클래스는 XML 파일을 나타내는 Document 객체를 특정 형식으로 변환하는 데 사용됩니다. 예를 들어 출력의 경우 xml 파일에 스타일 시트를 적용하고 html 문서로 변환합니다. 물론 이 개체를 사용하면 Document 개체를 XML 파일로 다시 작성할 수도 있습니다.

Transformer 클래스는 소스와 대상을 전달받는 transform 메서드를 통해 변환 작업을 완료합니다. 변환할

문서

객체를 다음을 통해 연결할 수 있습니다: javax.xml.transform.dom.DOMSource 클래스,

javax.xml.transform.stream.StreamResult 객체를 사용하여 데이터의 대상을 나타냅니다.

Transformer 객체는 TransformerFactory를 통해 얻습니다.

사례:

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);
		}
	}

}
로그인 후 복사

위 내용은 XML 프로그래밍-DOM 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿