首页 后端开发 XML/RSS教程 详解XML- JAXP技术-DOM解析

详解XML- JAXP技术-DOM解析

Mar 31, 2017 pm 02:12 PM

  DOM解析的基本思路:

    1、将整个XML文件一次性读入内存

    2、将整个XML看做一棵树

    3、XML中的每一个标签,属性,文本都看做是树上的一个结点

    4、然后可以对结点进行增删改查的操作

  话不多说,上代码。

  1、首先我在D:\ABC中新建了一个文本文件,重命名为stus.xml,以下是文件中的内容

<?xml version = "1.0" encoding = "GBK" ?>
    <stus class = "S160401A">
    <stu num = "001" >
    <name>张三</name>
    <age>20</age>
    <sex>男</sex>
    </stu>
 
    <stu num = "002">
    <name>李四</name>
    <age>21</age>
    <sex>女</sex>
    </stu>
 
    <stu num = "003">
    <name>王五</name>
    <age>22</age>
    <sex>男</sex>
    </stu>
    </stus>
登录后复制

 在第一行是XML声明,version表示版本号,encoding表示编码方式,微软的记事本用的是国标的编码方式,如果要用UTF-8,则要在另存为窗口中修改编码方式为UTF-8。

1351.png

 必须且只能有一对根标签,我写的根标签是。其他的就不多说了。

2、这是一个学生类,定义了一些属性和get、set方法

<span style="font-size: 16px;">public class Student {
	public static String Class;
	private String name;
	private int num;
	private int age;
	private char sex;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

}</span>
登录后复制

  3、这是用DOM解析的类,看这个类之前还要了解一下。

    DocumentBuilderFactory DOM解析器工厂

    DocumentBuilder DOM解析器

    Document 文档对象

    Node 结点【接口

    Element 元素结点【标签结点】

    Attr 属性结点

    Text 文本结点

    Node 是Document,Element,Attr,Text的父接口

    NodeList 结点列表

    NamedNodeMap 一个结点的所有属性

<span style="font-size: 16px;">import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

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

import bean.Student;

public class DOMParser {

	public static void main(String[] args) throws Exception {

		// 得到解析器工厂对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

		// 生产一个解析器对象
		DocumentBuilder builder = factory.newDocumentBuilder();

		// 开始解析XML文件,得到解析的结果,是一个Document对象
		// Document对象叫做文档树对象
		Document dom = builder.parse("D:\\ABC\\stus.xml");

		// 通过Document对象提取数据
		// Document对象的第一个子节点是根节点[根标签]
		Node root = dom.getFirstChild();
		// 获得标签的名字
		String str = root.getNodeName();
		// 获得根节点的属性
		NamedNodeMap attrs = root.getAttributes();
		// 强转成Attr类型 属性类
		Attr attr = (Attr) attrs.getNamedItem("class");
		// 获得属性里的值
		String v = attr.getValue();
		System.out.println(v);

		// 获得所有的学生-------------------------------------
		NodeList list = root.getChildNodes();
		for (int i = 0; i < list.getLength(); i++) {
			Node node = list.item(i);
			// 判断是否是标签结点
			if (node instanceof Element) {
				Element e = (Element) node;
				// 获得标签结点里属性的值
				String num = e.getAttribute("num");
				System.out.println(num);

				// 输出标签中的文本
				// System.out.println(e.getTextContent());

				// 继续获得stu的子节点
				NodeList nodeList = e.getChildNodes();
				for (int j = 0; j < nodeList.getLength(); j++) {
					Node n = nodeList.item(j);
					if (n instanceof Element) {
						Element ele = (Element) n;
						// 获得元素结点的标签名字
						String nodeName = ele.getNodeName();
						// 获得元素结点标签中的文本
						String value = ele.getTextContent();
						if (nodeName.equals("name")) {
							System.out.println("姓名:" + value);
						} else if (nodeName.equals("age")) {
							System.out.println("年龄:" + value);
						} else if (nodeName.equals("sex")) {
							System.out.println("性别:" + value);
						}
					}
				}
			}
		}
	}
}</span>
登录后复制

  自己在其中总结了一些方法:

  DocumentBuilderFactory类:

 public static DocumentBuilderFactory newInstance(); //得到解析器工厂对象
    public abstract DocumentBuilder newDocumentBuilder(); //生产一个解析器对象
登录后复制

  DocumentBuilder类:

    public Document parse(String uri); //解析路径为uri的XML文件,得到解析的结果是一个Document对象
登录后复制

  Node类:

 public Node getFirstChild(); //得到Document对象的第一个子结点,也就是根结点、或者叫根标签,在上面的代码中得到的是stus,看上面的第1点中的XML文件的内容。
    public NamedNodeMap getAttributes();//获得结点的属性
    public NodeList getChildNodes();//获得所有子结点
    public String getNodeName();//获得标签的名字 
    public String getTextContent() throws DOMException;//获得标签结点中的文本
登录后复制

  NamedNodeMap类:    

    public Node getNamedItem(String name);//返回所有名字为name的结点
登录后复制

  Attr类:

    public String getValue();//获得属性里的值
登录后复制

  NodeList类:

    public Node item(int index);//返回第index个结点
登录后复制

  Element类:

    public String getAttribute(String name);//获得标签结点里属性name的值
登录后复制

以上是详解XML- JAXP技术-DOM解析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

能否用PowerPoint打开XML文件 能否用PowerPoint打开XML文件 Feb 19, 2024 pm 09:06 PM

XML文件可以用PPT打开吗?XML,即可扩展标记语言(ExtensibleMarkupLanguage),是一种被广泛应用于数据交换和数据存储的通用标记语言。与HTML相比,XML更加灵活,能够定义自己的标签和数据结构,使得数据的存储和交换更加方便和统一。而PPT,即PowerPoint,是微软公司开发的一种用于创建演示文稿的软件。它提供了图文并茂的方

Python中的XML数据转换为CSV格式 Python中的XML数据转换为CSV格式 Aug 11, 2023 pm 07:41 PM

Python中的XML数据转换为CSV格式XML(ExtensibleMarkupLanguage)是一种可扩展标记语言,常用于数据的存储和传输。而CSV(CommaSeparatedValues)则是一种以逗号分隔的文本文件格式,常用于数据的导入和导出。在处理数据时,有时需要将XML数据转换为CSV格式以便于分析和处理。Python作为一种功能强大

Python实现XML和JSON之间的转换 Python实现XML和JSON之间的转换 Aug 07, 2023 pm 07:10 PM

Python实现XML和JSON之间的转换导语:在日常的开发过程中,我们常常需要将数据在不同的格式之间进行转换。XML和JSON是常见的数据交换格式,在Python中,我们可以使用各种库来实现XML和JSON之间的相互转换。本文将介绍几种常用的方法,并附带代码示例。一、XML转JSON在Python中,我们可以使用xml.etree.ElementTree模

使用Python处理XML中的错误和异常 使用Python处理XML中的错误和异常 Aug 08, 2023 pm 12:25 PM

使用Python处理XML中的错误和异常XML是一种常用的数据格式,用于存储和表示结构化的数据。当我们使用Python处理XML时,有时可能会遇到一些错误和异常。在本篇文章中,我将介绍如何使用Python来处理XML中的错误和异常,并提供一些示例代码供参考。使用try-except语句捕获XML解析错误当我们使用Python解析XML时,有时候可能会遇到一些

Python解析XML中的特殊字符和转义序列 Python解析XML中的特殊字符和转义序列 Aug 08, 2023 pm 12:46 PM

Python解析XML中的特殊字符和转义序列XML(eXtensibleMarkupLanguage)是一种常用的数据交换格式,用于在不同系统之间传输和存储数据。在处理XML文件时,经常会遇到包含特殊字符和转义序列的情况,这可能会导致解析错误或者误解数据。因此,在使用Python解析XML文件时,我们需要了解如何处理这些特殊字符和转义序列。一、特殊字符和

C#开发中如何处理XML和JSON数据格式 C#开发中如何处理XML和JSON数据格式 Oct 09, 2023 pm 06:15 PM

C#开发中如何处理XML和JSON数据格式,需要具体代码示例在现代软件开发中,XML和JSON是广泛应用的两种数据格式。XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,而JSON(JavaScript对象表示)是一种轻量级的数据交换格式。在C#开发中,我们经常需要处理和操作XML和JSON数据,本文将重点介绍如何使用C#处理这两种数据格式,并附上

使用Python实现XML中的数据校验 使用Python实现XML中的数据校验 Aug 10, 2023 pm 01:37 PM

使用Python实现XML中的数据校验引言:在现实生活中,我们经常会处理各种各样的数据,其中XML(可扩展标记语言)是一种常用的数据格式。XML具有良好的可读性和可扩展性,被广泛应用于各种领域,如数据交换、配置文件等。在处理XML数据时,我们经常需要对数据进行校验,以确保数据的完整性和正确性。本文将介绍如何使用Python实现XML中的数据校验,并给出相应的

Python如何解析XML文件 Python如何解析XML文件 Aug 09, 2023 am 11:48 AM

Python如何解析XML文件XML(eXtensibleMarkupLanguage)是一种用于表示结构化数据的标记语言。在处理XML数据时,我们经常需要解析XML文件以提取所需的信息。Python提供了很多库和模块来解析XML文件,例如ElementTree、lxml等。本文将介绍如何使用Python解析XML文件,并附带代码示例。在Python中,

See all articles