一、关于XML
- 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里面只有一个。
- Xml语法
- XML的文档声明
语法:<?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>
属性:version 用来表示xml的版本号
Encoding 用来表示xml的编码格式
Standalone 用来表示xml文档是否依赖外部的文件。
注意:xml的文档声明一定要放到第一行,第一列。
- XML元素定义
Xml文档都是通过元素操作(标记)定义,元素是开始标记、属性、文本和结束标记组成。
比如:标记可以嵌套,必须合理嵌套
- 属性定义
语法:<province name=”Hebei”>
属性对应的值要用“”给括起来
- 注释
Html的注释:<!—html的注释-->
javaScript的注释:参照Java的注释
Html的注释:<!—xml的注释-->
注意:
- xml是区分大小写的
- XML的标记不能以数字或者_下划线开头
- XML的标记不能以xml或者XML(大小写都不可以)开头。
- XML的标记里面不能包含空格等特殊符号,
二、关于DOM
- 简介
1.1什么是DOM:
DOM:Document Object Model,文档对象模型。
作用:是一套规范文档内容的通用型标准。
1.2 DOM HTML节点树
DOM HTML指的是DOM中为操作HTML文档提供的属性和方法。
- 文档(Document)表示HTML文件。
- 文档中的标签称为元素(Element)。
- 文档中的所有内容称为节点(Node)。
因此,一个HTML文件可以看作是所有元素组成的一个节点树,各元素节点之间有级别的划分 。
1.HTML文档
据节点作用,分为标签节点、文本节点、属性节点和注释节点。
各节点之间的关系,又可分为以下几个方面:
- 根节点:<html>标签是整个文档的根节点,有且仅由一个。
- 子节点:指的是某一个节点的下级节点。
- 父节点:指的是某一个节点的上级节点。
- 兄弟节点:两个节点同属于一个父节点。
- 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>
代码运行结果