DOM解析XML

1 篇文章 0 订阅

一、关于XML

  1. XML概述:

1.1 什么是xml,可扩展的标记语言。

XML用途:用来存储数据

*1.作为系统与系统之间传输数据的格式

*2.作为项目的配置文件

*3.保存有结构关系型的数据

1.2xml和html的比较

1.xml文档的标记可以随意扩展,html的标记是预先定义好的。

2.xml区分大小写,html不分大小写

3.html主要用来显示数据,xml用来保存数据

4.html中空格会自动过滤,xml不会

5.html中可以有多个根节点,在xml里面只有一个

  1. Xml语法
  1. XML的文档声明

语法:<?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>

属性:version 用来表示xml的版本号

      Encoding 用来表示xml的编码格式

      Standalone 用来表示xml文档是否依赖外部的文件。

注意:xml的文档声明一定要放到第一行,第一列

  1. XML元素定义

Xml文档都是通过元素操作(标记)定义,元素是开始标记、属性、文本和结束标记组成。

比如:标记可以嵌套,必须合理嵌套

  1. 属性定义

语法:<province name=”Hebei”>

属性对应的值要用“”给括起来

  1. 注释

Html的注释:<!—html的注释-->

javaScript的注释:参照Java的注释

Html的注释:<!—xml的注释-->

注意:

  1. xml是区分大小写的
  2. XML的标记不能以数字或者_下划线开头
  3. XML的标记不能以xml或者XML(大小写都不可以)开头。
  4. XML的标记里面不能包含空格等特殊符号,

二、关于DOM

  1. 简介

1.1什么是DOM:

DOM:Document Object Model,文档对象模型。

作用:是一套规范文档内容的通用型标准。

1.2 DOM HTML节点树

DOM HTML指的是DOM中为操作HTML文档提供的属性和方法。

  1. 文档(Document)表示HTML文件。
  2. 文档中的标签称为元素(Element)。
  3. 文档中的所有内容称为节点(Node)。

因此,一个HTML文件可以看作是所有元素组成的一个节点树,各元素节点之间有级别的划分 。

1.HTML文档

 

 

据节点作用,分为标签节点、文本节点、属性节点和注释节点。

各节点之间的关系,又可分为以下几个方面:

  1. 根节点:<html>标签是整个文档的根节点,有且仅由一个。
  2. 子节点:指的是某一个节点的下级节点。
  3. 父节点:指的是某一个节点的上级节点。
  4. 兄弟节点:两个节点同属于一个父节点。
  1. HTML元素操作

获取操作的元素——document对象的方法和属性

document对象提供了一些用于查找元素的方法,利用这些方法可以根据元素的id、name和class属性以及标签名称的方式获取操作的元素。

除了document.getElementById()方法返回的是拥有指定id的元素外,其他方法返回的都是符合要求的一个集合。若要获取其中一个对象,可以通过下标的方式获取,默认从0开始。

document对象提供一些属性,可用于获取文档中的元素。例如,获取所有表单标签、图片标签等。

  • document对象的body属性用于返回body元素。
  • document对象的documentElement属性用于返回HTML文档的根节点html元素。
  • 通过document对象的方法与document对象的属性获取的操作元素表示的都是同一对象。如document.getElementsByTagName(‘body’)[0]与document.body全等。

获取操作的元素——Element对象的方法和属性

在DOM操作中,元素对象也提供了获取某个元素内指定元素的方法,常用的两个方法分别为getElementsByClassName()和getElementsByTagName()。它们的使用方式与document对象中同名方法相同。

除此之外,元素对象还提供了children属性用来获取指定元素的子元素。

 


三、用DOM解析XML

package chapter01;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

public class test{
    public static void main(String[] args) {
        // 1、创建一个DocumentBuilderFactory
        DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();

        try {
            // 2、使用DocumentBuilderFactory得到一个DocumentBuilder对象
            DocumentBuilder db = df.newDocumentBuilder();

            //3、使用DocumentBuilder对象解析xml文件,得到一个Document对象
            Document document = db.parse("db_my.xml");

            // 3、获得xml文件中的所有book节点(标签)
            NodeList  bookList= (NodeList) document.getElementsByTagName("student1");

            System.out.println("共有"+bookList.getLength()+"个student1标签");

            // 4、遍历bookList中的book标签
            for (int i = 0 ; i < bookList.getLength() ; i++){
                // 5、获得book节点上面的属性
                NamedNodeMap attrs = bookList.item(i).getAttributes();

               System.out.println("这是第"+(i+1)+"本书上面的属性");
                // 6、遍历book节点上面拥有的属性
                for (int i2 = 0 ; i2 < attrs.getLength() ; i2++){
                    System.out.print("属性名:"+attrs.item(i2).getNodeName());
                    System.out.print("\t属性值:"+attrs.item(i2).getNodeValue());
                    System.out.println("\t属性类型:"+attrs.item(i2).getNodeType());

                }


                // 5、获得book标签的子节点
                NodeList childNode = (NodeList) bookList.item(i).getChildNodes();

                // 6、遍历子节点,获得子节点中的内容
                for (int i2  = 0 ; i2 < childNode.getLength() ; i2++){
                    Node no = childNode.item(i2);
                    if(no.getNodeType() != Node.TEXT_NODE){
                        System.out.print("子节点:"+no.getNodeName());
                        System.out.println("\t内容:"+no.getFirstChild().getTextContent());
                    }
                }
            }

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}

XML如下:

<?xml version="1.0" encoding="UTF-8"?>
<db_my>
<!--学生表-->
	<student1>
		<sid jdbcType="INT(11)">学号</sid>
		<sname jdbcType="VARCHAR(45)">姓名</sname>
		<ssex jdbcType="VARCHAR(45)">性别</ssex>
		<birthday jdbcType="VARCHAR(45)">生日</birthday>
		<sdept jdbcType="VARCHAR(45)">专业</sdept>
		<sphnoe jdbcType="INT(11)">电话</sphnoe>
		<sage jdbcType="INT(11)">年龄</sage>
	</student1>
	<!--学生课程表-->
	<sc1>
		<cid jdbcType="INT(11)">课程号</cid>
		<sid jdbcType="INT(11)">学号</sid>
		<course jdbcType="VARCHAR(45)">课程</course>
		<cteach jdbcType="VARCHAR(45)">教师</cteach>
	</sc1>
</db_my>

代码运行结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值