• XML 2021.1.7


    每日心得

    今天上午就讲了xml,下午搞了oracle的安装,本来打算将的,但安装时间费了很久,所以今天只讲了xml;

    XML

    网络资料:https://bk.tw.lvfukeji.com/baike-可扩展消息与存在协议?wprov=srpw1_0(可扩展消息与存在协议XMPP)

    https://bk.tw.lvfukeji.com/wiki/W3CW3C(W3C,万维网联盟,北京航空航天大学为W3C中国机构)

    推荐标准:CSS,HTML,XML等等;

    extensible markup language(可扩展标记语言)

    html hyper text markup language(超文本标记语言),组织发布-->浏览器升级去支持语言

    ObjectInput.readObject(Command);-->java Object

    ObjectOutput.writerObject(Command);-->java Object

    采用方式进行数据交互限制太多,只能用Java,类型也是Object,但项目开发中将会有多种语言,多种不同的设备,安卓,java,IOS,Linux C等等;

    跨语言数据交互

    字符串传输可以跨语言(只要采用同样的编码集,就可以跨语言),但没有规范,语言不同或者开发的人不同,对语言理解不同,其字符串使用的格式可能不同,所以这时候有了XML对字符串进行格式化;

    ml-->标记语言,x-->可扩展,为了可变化,xml是与java同一级别的,也是一种语言,是一种标记语言,是独立在java编程语言之外的,xmljava更早出现,java只是有使用xml的api;

    优点:使用同的规范,每个语言中可以写一个API,用了使用xml语法,拥有xml的解析和生成的功能,不用开发人员自己写,可读性很强;

    缺点:字符量太大,体量太大,xml就失去了优势,体量小可以使用,其功能逐渐被其他东西替代。

    webserviceXMPP,基于xml的传输协议

    最开始xml是用来做网页数据传输,-->json

    -->html替代

    现在也可以做配置文件-->也被注解Annotationpropertiesyml替代;

    名词概念

    (1)XML说明

    一个开始标签到一个结束标签是一个元素,元素里面可以包括元素,元素值必须加引号

    struts-->dtd

    dtd文件:对xml内容的规范与验证,对一个xml文件的属性,格式,各种进行规范的定义

    限制xml的内容,但没法进行精准控制,但语法较为简单;

    spring-->xsd

    xsd,语法规则较为复杂,可以精准控制其内容与格式;

    XML解析

    含义:将xml文件读取到java的内存里面,并且将你想要的那一部分信息截取出来;

    DOM解析:一次将xml读入到内存,形成一个xml树形结构;解析-->遍历这个树形结构;(文件不能太大,不然太占内存,程序会卡死)

    spring-->dom解析

    SAX解析:分布解析,逐步读取xml的标签,基于事件驱动的方式读取整个xml内容,因为是一个标签一个标签往后读,所以不怎么占内存,但是只能往后读,不能回退,要读最后一个节点,只能把前面读完,要读前面的,必须重写读;

    一般使用的都是DOM,因为xml文件一般不大,所以大部分情况DOM已经能够满足需求;除非对性能要求极高,需要反复不停地解析xml,例如使用XMPP写及时通讯,需要不停解析xml,才会出问题;而java中,xml作为配置文件,就只有一个,在启动时读完就行了。

    students.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <students>
    	<studuent>
    		<name>aaaa</name>
    		<age>11</age>
    		<gender>true</gender>
    	</studuent>
    		<studuent>
    		<name>bbbb</name>
    		<age>22</age>
    		<gender>false</gender>
    	</studuent>
    		<studuent>
    		<name>cccc</name>
    		<age>33</age>
    		<gender>true</gender>
    	</studuent>
    </students>
    

    Student

    package qifanclass.xml;
    
    public class Student {
    
    	private String name;
    	private int age;
    	private boolean gender;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public boolean isGender() {
    		return gender;
    	}
    	public void setGender(boolean gender) {
    		this.gender = gender;
    	}
    	@Override
    	public String toString() {
    		return "Student [name=" + name + ", age=" + age + ", gender=" + gender + "]";
    	}
    	
    }
    
    

    DomTest

    package qifanclass.xml;
    
    import java.io.File;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    
    
    public class DomTest {
    
    	public static void main(String[] args) throws Exception{
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//构建解析的工厂
    		
    		DocumentBuilder documentBuider = factory.newDocumentBuilder();//构造解析器
    		
    		File xml = new File("src/qifanclass/xml/students.xml");//传入xml文件
    		Document doc = documentBuider.parse(xml);//这时会将整个xml文件读入到内存中,并且将解析构建成一个Document
    												//这个Document文档就是对于整个xml节点数的一个引用,你就可以通过整个对象去获取xml的根节点,根节点再去获取它的子元素,通过子元素再去获取子元素的内容,分步来读取里面的内容
    		Element element = doc.getDocumentElement();//获取整个文档的根节点
    		//System.out.println(element);结果:[students: null]
    		NodeList childNodes = element.getChildNodes();//通过根节点获取子节点
    		//System.out.println(childNodes.getLength());结果为7,这里需要注意,除了看到的3个子节点以外,每个子节点的每一个前或后空白也算一个节点,也就是四个空白节点,就是7个节点
    		
    		for(int i=0;i<childNodes.getLength();i++){//遍历
    			Node node = childNodes.item(i);//获取某一个节点
    			/*System.out.println(node);这里也输出了空白节点
    			结果:
    			 		[#text: 
    							]
    					[studuent: null]
    					[#text: 
    							]
    					[studuent: null]
    					[#text: 
    							]
    					[studuent: null]
    					[#text: 
    					]*/
    			if(node instanceof Element){//判断是不是一个元素,省去空白
    				Element ele =(Element)node;//转换为一个元素
    				//ele.getAttribute("");获取属性
    				//ele.getAttributes();获取所以属性
    				/*System.out.println(ele.getNodeName());
    				获取节点名字结果
    				studuent 
    				studuent
    				studuent*/
    				Student stu = new Student();
    				NodeList names = ele.getElementsByTagName("name");//每一个student里有几个name
    				//System.out.println(name.getLength());结果为1 1 1
    				Element nameElement = (Element)names.item(0);//获取name元素
    				Element ageElement = (Element)ele.getElementsByTagName("age").item(0);//获取age元素
    				Element genderElement = (Element)ele.getElementsByTagName("gender").item(0);//获取gender元素
    				String name= nameElement.getTextContent();//获取元素中的文本(值)
    				String age = ageElement.getTextContent();
    				String gender =genderElement.getTextContent();
    				System.out.println("name:"+name+",age:"+age+",gender:"+gender);
    				/*结果为
    				name:aaaa,age:11,gender:true
    				name:bbbb,age:22,gender:false
    				name:cccc,age:33,gender:true
    				 */
    			}
    		}
    	}
    }
    
    

    部分说明:

    XML
    1.什么是XML
    XML指可扩展标记语言(EXtensible Markup language)
    XML是一种标记语言,很类似HIML
    XML的设计宗旨是传输数据,而非显示数据
    XML标签没有被预定义。您需要自行定义标签。
    XML被设计为具有自我描述性,
    XML是W3C的推荐标准

    2.XMLHIML的主要差异
    XML不是HTML的替代。
    XMLHML为不同的目的而设计。
    XML被设计为传输和存储数据,其焦点是数据的内容。
    HTML被设计用来显示数据,其焦点是数据的外观。
    HTML旨在显示信息,而XML旨在传输信息。

    3.XML用于创建新的 Intermet语言
    XHTML-最新的HML版本4
    WSDL-用于描述可用的web service
    WPLWML-用于手持设备的标记语言
    RSS-用于 RSS feed的语言
    RDFOWL-用于描述资源和本体
    SMIL-用于描述针对web的多媒体

    4.名词概念
    XML说明
    <?xml version-"1.0"encoding-"utf-8"?>
    ●标记(标签)Tag
    标记(标签)是左尖括号(<)和右尖括号(>)之间的文本。有开始标记(例如
    <speciality>)和结東标记(例如:</speciality>)
    XML元素 Element
    XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
    元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
    <a>aaaaaa <a><a1>bbbb<a1>/a> <a><a href=""/>
    XML属性
    属性( Attribute)提供关于元素的额外(附加)信息。
    XML属性必须加引号(单引号,或者双引号)。

    避免XML属性?
    因使用属性面引起的一些问题:
    属性无法包含多重的值(元素可以)
    属性无法描述树结构(元素可以)
    属性不易扩展(为未来的变化)←
    属性难以阅读和维护
    请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
    Eg:

    <note day="08"month=08"year="2008"/
    to="George"from"John"heading="Reminder"
    body="Don't forget the meeting!">
    </note>
    

    5.语法规则
    XML命名规则
    XML元素必须遵循以下命名规则
    名称可以含字母、数字以及其他的字符
    名称不能以数字或者标点符号开始
    名称不能以字符“xml"(或者XMLXml)开始
    名称不能包含空格
    可使用任何名称,没有保留的字词。
    ●所有的XML元素都必须有关闭标签
    注:XML声明没有关闭标签,这不是错误,声明不属于XML本身的组成部分,它不是XML元素,也不需要关闭标签,
    XML标签对大小写敏感
    XML必须正确地嵌套,不能交叉嵌套4
    XML文档必须有根元素
    注:XML文档必须有一个元素是所有其他元素的父元素。该元素称为根元素,
    XML的属性值须加引号
    ●实体引用
    < < 小于
    > > 大于
    & & 和号
    ' ' 单引号
    " " 双引号
    XML中的注释
    <!-- -->
    ●在XML中,空格会被保图
    CDATA
    <![CDATA[ ]]>//中间可放xml语句,识别为字符串
    6.验证
    拥有正确语法的XML被称为“形式良好”的XML
    通过DTD/ SCHEMA验证的XML是“合法”的XML
    7.xml解析
    DOM:将整个xml,一次性解析后,在内存中生成DOM树。
    SAX:通常通过流的方式逐步解析,。

  • 相关阅读:
    Redis入门
    k8s dubbo微服务之maven配置
    NoSQL发展历史与阿里巴巴架构演进分析
    k8s交付dubbo微服务之部署Jenkins
    k8s版本平滑升级
    读 <The Lost Horizon> 感
    luogu P1026 统计单词个数
    acm一些小细节/技巧
    数据结构与算法——常用高级数据结构及其Java实现
    数据结构与算法——常用排序算法及其Java实现
  • 原文地址:https://www.cnblogs.com/zzdbk/p/14248034.html
Copyright © 2020-2023  润新知