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

  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声明895eb4cb0fce28148b0eb46e537da768,version表示版本号,encoding表示编码方式,微软的记事本用的是国标的编码方式,如果要用UTF-8,则要在另存为窗口中修改编码方式为UTF-8。

1351.png

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

 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
解码RSS:Web开发人员的XML底漆解码RSS:Web开发人员的XML底漆May 06, 2025 am 12:05 AM

RSS是一种基于XML的格式,用于发布常更新的数据。作为Web开发者,理解RSS能提升内容聚合和自动化更新能力。通过学习RSS结构、解析和生成方法,你将能自信地处理RSSfeeds,优化Web开发技能。

JSON与XML:为什么RSS选择XMLJSON与XML:为什么RSS选择XMLMay 05, 2025 am 12:01 AM

RSS选择XML而不是JSON是因为:1)XML的结构化和验证能力优于JSON,适合RSS复杂数据结构的需求;2)XML当时有广泛的工具支持;3)RSS早期版本基于XML,已成标准。

RSS:基于XML的格式解释了RSS:基于XML的格式解释了May 04, 2025 am 12:05 AM

RSS是一种基于XML的格式,用于订阅和阅读频繁更新的内容。它的工作原理包括生成和消费两部分,使用RSS阅读器可以高效获取信息。

在RSS文档中:必需XML标签和属性在RSS文档中:必需XML标签和属性May 03, 2025 am 12:12 AM

RSS文档的核心结构包括XML标签和属性,具体解析和生成步骤如下:1.读取XML文件,处理和标签。2.提取、、等标签信息。3.处理自定义标签和属性,确保版本兼容性。4.使用缓存和异步处理优化性能,确保代码可读性。

JSON,XML和数据格式:比较RSSJSON,XML和数据格式:比较RSSMay 02, 2025 am 12:20 AM

JSON、XML和RSS的主要区别在于结构和用途:1.JSON适用于简单数据交换,结构简洁,易于解析;2.XML适合复杂数据结构,结构严谨但解析复杂;3.RSS基于XML,用于内容发布,标准化但用途有限。

故障排除XML/RSS提要:常见的陷阱和专家解决方案故障排除XML/RSS提要:常见的陷阱和专家解决方案May 01, 2025 am 12:07 AM

XML/RSS订阅源的处理涉及解析和优化,常见问题包括格式错误、编码问题和元素缺失。解决方案包括:1.使用XML验证工具检查格式错误;2.确保编码一致性并使用chardet库检测编码;3.处理元素缺失时使用默认值或跳过该元素;4.使用高效解析器如lxml和缓存解析结果以优化性能;5.注意数据一致性和安全性,防止XML注入攻击。

解码RSS文档:阅读和解释提要解码RSS文档:阅读和解释提要Apr 30, 2025 am 12:02 AM

解析RSS文档的步骤包括:1.读取XML文件,2.使用DOM或SAX解析XML,3.提取标题、链接等信息,4.处理数据。RSS文档是一种基于XML的格式,用于发布更新内容,结构包含、和元素,适用于构建RSS阅读器或数据处理工具。

RSS和XML:Web联合组织的基石RSS和XML:Web联合组织的基石Apr 29, 2025 am 12:22 AM

RSS和XML是网络内容分发和数据交换的核心技术。RSS用于发布频繁更新的内容,XML用于存储和传输数据。通过实际项目中的使用示例和最佳实践,可以提高开发效率和性能。

See all articles

热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

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

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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