XMl可扩展标记语言

1.什么是XML?

XML指可扩展标记语言它是一种很像HTML的标记语言,它的设计宗旨是传输数据,而不是显示数据。HTML中的元素是固定的,而XML标签没有被预定义,可以由用户来进行自定义,XML被设计为具有自我描述性,且跨平台。
在这里插入图片描述

2.XML文档结构

XML的扩展名为.xml,它由两大部分组成,头部的声明和下面的主体描述信息。
声明一般处于XML文件的第一行,用来标注XML的配置属性。
version:采用什么版本的XML规范。
encoding:采用什么编码格式存储信息。
主体描述信息由一系列的标记/标签/元素/“节点”组成,XML一定且仅有一个根元素,根元素的开始标签放在最前面,结束标签放在最后面,包裹着自定义的描述信息。
在这里插入图片描述

2.1XML的标签

和HTML一样,XML都是由标记/标签组成,也可称为元素。属性值中不能直接包含<、""、&等。

在这里插入图片描述

2.2XML的编写注意事项

  1. 所有XML元素都必须有结束标签。

  2. XML标签对大小写敏感。

  3. XML必须正确的嵌套。

  4. 同级标签以缩进对齐。

  5. 元素名称可以包含字母数字或其他字符。

    元素名不能以数字或者标点符号开始。
    元素名中不能包含空格。

2.3XML中的转义符

上面提到了XML中属性值等信息里不允许出现一些特殊符号,< ’ & "等,因为它们在XML中有特殊含义,就像Java不能使用关键字表示一些自定义信息一样。如果还是享用这些符号,可以采用对应的标记语言的转义符。

在这里插入图片描述

当大量的转移字符出现在XML文档中时,会师XML文档的可读性大幅降低。这时如果使用CDATA段会好一些。
在这里插入图片描述

XML解析技术

在这里插入图片描述

DOM解析

在这些解析方式里,DOM师最基础的解析方式,由W3C开发,并内置在我们的Java类库中,API包地址为:org.w3c.dom.***。
DOM师Document Object Model(文档对想模型)的意思。它的解析方式要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
在这里插入图片描述

DOM解析包:org.w3c.dom
在这里插入图片描述

查看XML内容

在这里插入图片描述
在这里插入图片描述
获取Document对象

public static void getXMLDocument(){
	try{
		// 1.创建解析器工厂对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 2.解析器工厂对象创建解析器对象
		DocumentBuilder builder = factory.newDocumentBuilder();
		// 3.解析器对象指定XML文件创建Document对象
		doc = builder.parse(new File("XXX"));
	}catch{
	....
}
}

展示信息

public static void showNode(){
	// 获取所有的brand集合
	NodeList list = doc.getElementsByTagName("Brand");
	// 遍历集合
	for(int i = 0;i < list.getLength;i ++){
		// 获取每一个brand元素
		Node item = list.item(i);
		// 强转
		Element ele = (Element) item;
		// 获得二bradn名称
		String brand = ele.getAttribute("name");
		// 获得type名称
		NodeList typeList = ele.getChiledNodes();
		// 遍历集合
		for(int j = 0;j < typeList.getLength();j ++){
			Node item2 = typeList.item(j);
			//判断是否是Element类型此处类型有个编号所有用==来比价即可
			if(item2.getNodeType() == Node.ELEMNT_NODE){
				Element ele2 =(Element)item2;
				String type = ele2.getAttribute("name");
				System.out.println(brand + ":" + type);
			}
		}
	}
}

给XML添加内容

public static void addNode(){
	// 添加新的元素
	Element ele = doc.createElement("brand");
	ele.setAttribute("name","三星");
	// 创建子元素
	Element eleType = doc.createElement("type");
	eleType.setAttribute("name","Note7");
	// 将子元素添加到父元素下
	ele.appendChild(eleType);
	// 获取根节点getElementsByTagName是获取节点集合然后item(0)表示获取第一个
	Node item = doc.getElementsByTagName("phoneInfo").item(0);
	// 添加到根节点下
	item.appendChile(ele);
}

保存XML内容
注意:无论是添加还是修改只要操作了,一定要记得保存XML信息。

实现步骤

在这里插入图片描述
public static void saveXML(){
try{
// 1.获得TransformerFactory转换工厂对象
TransformerFactory factory = TransformerFactory.newInstance();
// 2.创建Transformer转换对象
Transformer former = factory.newTransformer();
// 3.创建DOMSource对象 传入doc对象即包含XML信息数据源
DOMSource domSource = new DOMSource(doc);
// 4.转换器设置输出属性 转码格式
former.setOutputProperty(“encoding”,“UTF-8”);
// 5.创建StreamResult对象,包含保存文件的信息,保存到什么地方 数据目的地
StreamResult streamResult = new StreamResult(new FIleOutputStream("src/“xxx”));
// 6.将XML保存到指定地方
former.transform(domSource,streamResult);

}

}

修改/删除XML内容

public static void updateNode() {
	// 获取所有的Brand元素
	NodeList list = doc.getElementsByTagName("brand");
	// 遍历集合
	for(int i = 0;i < lis.getLength; i ++){
		// 获取每一个brand元素
		Node item = list.item(i);
		// 强转为获得方法
		Element ele = (Element)item;
		// 如果元素name属性是三星就进行修改
		if(ele.getAttribute("name").equals("三星")){
			// 修改SAMSUNG
			ele.setAttribute("name","SAMSUNG");
		}
	}
}

删除
在这里插入图片描述


public static void deletNode() {
	// 获取所有的brand元素
	NodeList list = doc.getElementsByTagName("brand");
	// 遍历集合
	for(int i = 0;i < list.getLength();i ++) {
		// 获取每一个brand元素
		Node item = list.item(i);
		// 强转为了获得方法
		Element ele = (Element) item;
		if(ele.getAttribute("name").equals("SAMSUNG")){
			// 获得父节点并删除自己
			ele.getParentNode().removeChild(ele);
		}
	}
}

DOM4J解析

在这里插入图片描述
常用API如下:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值