G_03_XML

一、什么是XML

	1、XML指可扩展标记语言(Extensible Markup Language)
	2、XML是一种标记语言,很类似HTML
	3、XML的设计宗旨是传输数据而非显示数据
	4、XML标签没有被预定义,你需要自己定义
	5、XML被设计为具有自我描述性
	6、XML是W3C推荐标准

二、HTML和XML区别

	1、HTML语法比较松散,XML语言严格
	2、HTML所有标签都是预先定义号的,使用固定标签展示不同内容
	3、XML标签都是自定义
	4、XML用处:数据存储、配置文件、数据传输

三、XML基本语法

	1、文档声明:
		<?xml version="1.0" encoding="UTF-8"?>//必须放在第一行
		属性:version版本号 固定为"1.0"
			  encoding文档码表 默认iso-8859-1
			  standalone指定文档是否独立yes或no,是否可以引用其它文件
	2、规则:
		所有XML元素都得有关闭标签
		XML标签对大小写敏感
		XML必须正确的嵌套
		XML文档必须有根元素
		XML属性值需要加引号
		实体引用:
			再XML中一些z字符拥有特殊意义
			如果把字符"<"放在XML元素中,会放生错误,这是因为解析器会把它当作新元素开始。这样会产生XML错去
			5个预定义实体引用:
				&lt;<
				&gt;>
				&amp;&
				&apos;'
				&quot;"
	3、元素:
		名称可以包含z字母、数字j及其它字符
		名称不能以数字或者标点符号开头
		名称不能以xml(XML\Xml)开始
		名称不能包含空格
	4、文本:
		<![CDATA[数据内容]]>里面的内容会原样显示
	
				
		

在这里插入图片描述

四、XML约束

	1、DTD约束
		内部dtd:再xml当中定义dtd
		外部dtd:再外部文件当中单独定义dtd
				本地:<!DOCTYPE 名称 SYSTEM "student.dtd">
				网络:<!DOCTYPE students PUBLIC "命名空间" "student.dtd">
		学习要求:不用自己写dtd,只需要看懂别人的dtd约束
		存在问题:再标签中存放的内容bbu不知道是什么类型,写的都是汉字这种约束不严谨
	2、schema约束
		1)编写根标签
		2)引用约束地址:xsi:schemaLocation="默认空间 约束地址.xsd"
		3)引用实例名称空间:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		4)默认名称空间:xmlns="http://www.it666.cn/xml"
		
		<students xsi:schemaLocation="http://www.it666.cn/xml student.xsd"
				  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				  xmlns="http://www.it666.cn/xml"
					>	
		</students>

在这里插入图片描述

五、DOM解析

	结点:
		文档结点:syudent.xml    Document:文档结点 xml文件
		元素结点:Element 元素结点 使用<>标签
		属性结点:Attr   属性结点 元素上属性名="属性值"
		文本结点:Text    元素之间的内容
	DOM:Document Object Model文档对象模型  把文档成员描述称一个个对象
		使用java代码操作xml
	DOM解析特点:
		1)再加载时一次性把整个XML文档加载进n内存,再内存中形成一棵树
		2)以后使用代码操作Document,其实操作的是内存中 的DOM树,和本地磁盘中的xml文件没有直接关系。
		3)由于操作的是内存中的dom树,磁盘中xml文件没有改变,要进行同步让两边保持一致(查询不需要同步 z只有数据变化时需要同步)
		4)缺点:xml文件过大可能造成内存溢出
	DOM解析步骤:
		1)创造解析器工厂
		2)通过解析器工厂得到解析器
		3)通过解析器得到document对象
		4)获取具体结点内容
	获取具体结点内容:
		//1.创建解析器工厂
		DocumentBuilderFactory bdf=DocumentBuilderFactory.newInstance();
		//2.通过解析器工厂获得解析器
		DocumentBuilder db=bdf.newDocumentBuilder();
		//3.通过解析器得到document对象
		Document doc=db.parse("src/com/xml/parse/student.xml")
		//4.根据节点获取具体节点内容
		NodeList allStu=doc.getElementsByTagName("student");
		//5.获取第一学生
		Node stu=allStu.item(0);
		//6.把学生当中所有文本打印粗来
		System.out.println(stu.getTextContent());
	修改元素内容:
		//1.创建解析器工厂
		DocumentBuilderFactory bdf=DocumentBuilderFactory.newInstance();
		//2.通过解析器工厂获得解析器
		DocumentBuilder db=bdf.newDocumentBuilder();
		//3.通过解析器得到document对象
		Document doc=db.parse("src/com/xml/parse/student.xml")
		//4.获取素有指定结点
		NodeList ageList =doc.getElementsByTagName("age");
		//5.获取要修改的结点内容
		Node ageNode=ageList.item(1);
		//6.修改元素内容
		ageNode.setTextContent("30");
		//7.从内存写道文档做同步
		Transformer tf=TransformerFactory.newInstance().newTransformer();
		tf.transform(new DOMSource(doc),new StreamResult("src/com/xml/parse/student.xml"))
	DOM添加元素:
		//1.创建解析器工厂
		DocumentBuilderFactory bdf=DocumentBuilderFactory.newInstance();
		//2.通过解析器工厂获得解析器
		DocumentBuilder db=bdf.newDocumentBuilder();
		//3.通过解析器得到document对象
		Document doc=db.parse("src/com/xml/parse/student.xml")
		//4.创建一个结点
		Element addressEle =doc.createElement("address");
		//5.设置元素内容
		addressEle.setTextContent("地址1");
		//6.获取要添加元素的父结点
		Node stuNode=doc.getElementByTageName("student").item(0);
		//7.添加结点
		stuNode.appendChild(addressEle);
		//8.同步
		Transformer tf=TransformerFactory.newInstance().newTransformer();
		tf.transform(new DOMSource(doc),new StreamResult("src/com/xml/parse/student.xml"))
	DOM删除元素:
		//1.创建解析器工厂
		DocumentBuilderFactory bdf=DocumentBuilderFactory.newInstance();
		//2.通过解析器工厂获得解析器
		DocumentBuilder db=bdf.newDocumentBuilder();
		//3.通过解析器得到document对象
		Document doc=db.parse("src/com/xml/parse/student.xml")
		//4.获取一个结点
		Node addressNode=doc.getElementsByTagName("address").item(0);
		//5.获取该结点的父节点并从父节点中删除
		addressNode.getParentNode().removeChild(addressNode);
		//6.同步
		Transformer tf=TransformerFactory.newInstance().newTransformer();
		tf.transform(new DOMSource(doc),new StreamResult("src/com/xml/parse/student.xml"))
	DOM添加元素属性:
		//1.创建解析器工厂
		DocumentBuilderFactory bdf=DocumentBuilderFactory.newInstance();
		//2.通过解析器工厂获得解析器
		DocumentBuilder db=bdf.newDocumentBuilder();
		//3.通过解析器得到document对象
		Document doc=db.parse("src/com/xml/parse/student.xml")
		//4.获取要添加属性的结点
		Node stu=doc.getElementsByTagName("student").item(0);
		//5.把获取的结点强制转换成Element
		Element ele=(Element)stu;
		//6.设置属性
		ele.setAttribute("ID","00001")
		//7.同步
		Transformer tf=TransformerFactory.newInstance().newTransformer();
		tf.transform(new DOMSource(doc),new StreamResult("src/com/xml/parse/student.xml"))
		

在这里插入图片描述

六、Dom4j

	1、DOM4j:
		是dom4j.org出品的一个开源XML解析包
		是一个十分优秀的javaXML API.具有性能优异、功能强大和极易使用d的特点,它性能超过sun公司官方d的dom技术,同时它也是一个开放源代码的软件
		越来越多的java软件都再使用dom4j来读写xml
	2、获取指定标签内容
		//1.创建SAXReader
		SAXReader reader=new SAXReader();
		Document doc=reader.read("src\\com\\xml\\dom4j\\student.xml");
		//2.获取根元素
		Element rootElement=doc.getRootElement();
		//3.根据名称获取根元素下所有元素
		List<Element> stuList=rootElement.elements("student");
		//4.遍历每一个元素
		for(Element stuEle:stuList)
		{
			//Element nameEle=stuEle.element("name");
			//System.out.println(nameEle.getText());
			String name=stuEle.elementText("name");
			String num=stuEle.attributeValue("number");
		}
		//5.获取指定名称元素
		//6.获取标签当中的文本
	3、添加元素
		//1.创建SAXReader
		SAXReader reader=new SAXReader();
		Document doc=reader.read("src\\com\\xml\\dom4j\\student.xml");
		//2.获取根元素
		Element rootEle=doc.getRootElement();
		//3.给根源素添加元素和属性
		Element stuEle=rootEle.addElement("student").addAttribute("number","a0003");
		stuEle.addElement("name").setText("王无");
		Writer wr=new OutputStreamWriter(new FileOutputStream("src\\com\\xml\\dom4j\\student.xml","UTF-8");
		doc.write(wr);
		wr.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值