1.XML简介
概念:XML(Extensible Markup Language),可扩展标记语言
特点
- XML与操作系统、编程语言的开发平台无关
- 实现不同系统之间的数据交换
作用
- 数据交互
- 配置应用程序和网站
- 临时数据库
保存很多数据:数组 缺陷:长度有限制、数据类型有限制;
集合:驻留在内存在,一旦应用程序停止了,数据也丢失了。
写文件,存磁盘.文件可以很方便的进行平台的切换,而且格式有规律,易于操作。
Properties===>.properties
xml===>支持任何数据类型,与平台无关、与编程语言无关
2.XML格式
标签编写注意事项
- 所有XML元素都必须有结束标签
- XML标签对大小写敏感
- XML必须正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或其他的字符
- 元素名称不能以数字或者标点符号开始
- 元素名称中不能含空格
例一、转义符的使用效果
需求说明:如下图所示上面图片在XML中使用了转义符,可以正常显示符号“<”;下面图片没有使用转义符。请使用转义符实现“<”正常显示。
<?xml version="1.0" encoding="utf-8" ?>
<!--需求说明:如下图所示上面图片在XML中使用了转义符,可以正常显示符号“<”;
下面图片没有使用转义符。请使用转义符实现“<”正常显示。-->
<students>
<student id="s100" name="tony" score="<98"/>
</students>
例二、XML保存衣服尺码信息
需求说明:使用XML文件保存下表中衣服的尺码信息,效果如图所示。
<?xml version="1.0" encoding="UTF-8" ?>
<!--用XML文件保存下表中衣服的尺码信息-->
<clothesSize>
<size range="height<165">S</size>
<size range="165<height<170">M</size>
<size range="170<height<175">L</size>
<size range="175<height<180">XL</size>
<size range="180<height<185">XXL</size>
</clothesSize>
例三、显示手机品牌和型号
需求说明:使用DOM解析XML文件,显示如下第一张图中收藏的手机品牌和型号,输出效果如第二张图所示。
DOM解析XML文件的步骤:确定
(1)得到DOM解析器的工厂实例DocumentBuilderFactory对象;
(2)从DOM工厂获得DOM解析器DocumentBuilder对象;
(3)解析XML文档,得到一个Document,即DOM树Document对象;
(4)获取所有Brand标签NodeList对象;
(5)for循环遍历所有的Brand标签;
(6)在循环中解析XML中的各个信息并输出显示;
package com.vp.day04.demo04;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
import static org.w3c.dom.Node.ELEMENT_NODE;
/**
*需求说明:使用DOM解析XML文件,显示如下第一张图中收藏的手机品牌和型号,输出效果如第二张图所示。
DOM解析XML文件的步骤:
(1)得到DOM解析器的工厂实例DocumentBuilderFactory对象;
(2)从DOM工厂获得DOM解析器DocumentBuilder对象;
(3)解析XML文档,得到一个Document,即DOM树Document对象;
(4)获取所有Brand标签NodeList对象;
(5)for循环遍历所有的Brand标签;
(6)在循环中解析XML中的各个信息并输出显示;
*/
public class XmlTest {
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
fun1();
}
public static void fun1() throws ParserConfigurationException, IOException, SAXException {
//实例化DocumentBuilderFactory,得到dom解析器工厂
DocumentBuilderFactory fac=DocumentBuilderFactory.newInstance();
//通过解析器工厂fac得到dom解析器
DocumentBuilder builder=fac.newDocumentBuilder();
//通过dom解析器解析xml--》得到document对象(树)
Document doc = builder.parse(new File("E:\\yang\\java\\java3\\src\\com\\vp\\day04\\demo04\\Test.xml"));
// 获取Brand节点的集合
NodeList brandList=doc.getElementsByTagName("Brand");
// 遍历每一个Brand节点
for (int i = 0; i <brandList.getLength() ; i++) {
//通过item(i)方法获取一个Brand节点
Node brand = brandList.item(i);
// 获取Brand节点的所有属性
NamedNodeMap attrs = brand.getAttributes();
//遍历brand的属性
for (int j = 0; j < attrs.getLength(); j++) {
// 通过item方法获取brand节点的某个属性
Node attr = attrs.item(j);
// 获取属性值
System.out.println("品牌:" + attr.getNodeValue());
}
NodeList types=brand.getChildNodes();
for (int j = 0; j <types.getLength() ; j++) {
if (types.item(j).getNodeType()== ELEMENT_NODE){
//获取一个type节点
Node type = types.item(j);
//获取type的所有属性
NamedNodeMap typeName = type.getAttributes();
for (int k = 0; k <typeName.getLength() ; k++) {
System.out.println("\t\t型号:"+typeName.item(k).getNodeValue());
}
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<PhoneInfo>
<Brand name="华为">
<Type name="U8650"/>
<Type name="HW123"/>
<Type name="HW321"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone4"/>
</Brand>
</PhoneInfo>