目录
  • xml的主要用途
    • 对比html
    • 关于xml文件的解析?
    • jdk自带的一套解析

    xml的主要用途

    • –数据存储和数据描述
    • –是一个优良的配置文件
    • –相当于一个小型数据库
    • –xml不依赖于任何一种编程语言,是独立的w3c提供的规范,所以可以完成多种语言之间的数据交换(重点)

    xml的语法严格,并且完全区分大小写

    • xml(extensible markup language)-描述事物本身 .xml

    xsl (extensible stylesheet language)-修饰xml xsl文件也有单独的文件,文件后缀 .xsl

    通过以下陈程序引入xsl文件

    <?xml-stylesheet type="text/xsl" href="student.xsl"?>

    dtd (docment type definition)-约定xml的标签 在xml文件中只能编写那些标签,标签中只能编写那些属性 dtd有单独的文件,文件后缀 .dtd

    dtd实例

    schema-约定xml标签和类型,比dtd编写更加方便,(约束xml文件) schema有单独的文件,文件后缀 .xsd/.xml

    实例是:

    <?xml version="1.0" encoding="gb2312"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema">
    	<xs:element name="丛书">
    		<xs:complextype>
    			<xs:sequence>
    				<xs:element name="书">
    					<xs:element name="名"  minoccurs="1"></xs:element>
    					<xs:element name="人"></xs:element>
    					<xs:element name="价">
    						<xs:attribute name="unit">
    							<xs:enumeration value="rmb"/>
    							<xs:enumeration value="美元"/>
    							<xs:enumeration value="日元"/>
    						</xs:attribute>
    					</xs:element>
    				</xs:element>
    		</xs:sequence>
    		</xs:complextype>
    	</xs:element>
    </xs:schema>
    

    可以扩展的原因:dtd可以修改

    对比html

    html(hyper text markup language

    *超文本传输标记语句(程序员不能自己扩展)

    *html主要用途:做页面展示,不会做数据处理

    *语法松散,不区分大小写

    css

    dtd(doucment type defined)约束html能有那些标签,标签能有那些属性

    schema (dtd的升级版,语法更新一些,和dtd达到同等效果)

    不可扩展原因:dtd不可扩展

    关于xml文件的解析?

    *无论是哪一种编程语言,对xml文件的解析都包括两种方式:

    *dom解析

    *sax解析(org.xml.sax.helps defaulthandler)

    dom解析

    *原理

    在开始解析xml文件的时候,将整个xml文件全部加载到内存中

    在内存中编程语言将xml文件映射成一颗dom树,这颗树就是一个

    对象,然后我们对这棵树上的任意节点进行增删改查操作,由于

    这棵树全部都在内存上,解析过去的节点可以再次解析,比较灵活。

    *优点

    灵活,解析过去的节点,可以再次解析

    *缺点

    如果xml文件比较大,可能会导致内存溢出,即使不导致内存溢出,

    也会耗费大量内存,内存少了项目的运行效率自然就降低了。

    *什么情况下选择dom解析方式

    如果很灵活的操作每一个元素,选用dom解析,但是注意文件需要小一些

    sax解析

    *原理

    sax解析是基于事件驱动型的解析方式,他的解析不需要将整个xml文件全部

    转载到内存中,解析的时候是有顺序的,在xml文件中从上往下依次解析,遇

    到开始标签,表示发生了一个特定的事件,此时执行一段特定的程序,遇到结束

    标签表示又发生一个特定事件,此时执行一段特定的程序完成解析。

    *优点

    不需要转载xml文件,所以不会占用大量内存, 适合大文件

    *缺点

    解析过去的节点不能重复解析,除非重头开始

    *什么情况下选择sax解析方式

    大文件适合使用sax解析

    作为程序员如何解析xml文件,解析xml文件的开源项目都包括那些?

    java解析xml相关的开源项目

    *dom4j(dom for java)

    *jdom

    …..

    jdk自带一套,是实现w3c规范的

    *org.w3c.com.*; 基于dom解析

    *org.xml.sax.*; 基于sax解析

    为了提高我们解析xml文件的效率,还涉及到xpath。(是一种标签匹配方式,类似于正则表达式,可以让我们程序快速定位xml文件中的标签)

    解析xml文件涉及到:

    dom4j/jdom/w3c+……xpath

    jdk自带的一套解析

    首先在src目录下创建一个xml文件

    以下为解析过程

    /**
     * 使用jdk自带的"dom解析"xml文件(读)
     */
    public class text04 {
        public static void main(string[] args) throws exception {
            //创建文档解析器工厂对象
            documentbuilderfactory factory= documentbuilderfactory.newinstance();
            //创建文档解析器对象
            documentbuilder builder=factory.newdocumentbuilder();
            //开始解析xml文件
            string path=thread.currentthread().getcontextclassloader().getresource("db-config.xml").touri().getpath();
            document document =builder.parse(new file(path));//dom树,在内存中生成了一颗dom树
            //获取根元素
            node rootnode=document.getfirstchild();
            //获取根元素的名字
            system.out.println(rootnode.getnodename());
            //通过根元素获取其他元素
            node drivernode=document.getelementsbytagname("driver").item(0);
            string driver =drivernode.gettextcontent();
            system.out.println(driver);
        }
    }
    

    输出结果

    使用dom4j开源项目(基于dom解析)解析xml文件(读)

    需要将dom4j开源项目的jar包作为目录导入

    /**
     * 使用dom4j开源项目解析xml文件(读)
     *
     * 读xml文件
     *
     * dom4j
     *
     * 基于dom方式
     */
    public class text01 {
        public static void main(string[] args) throws exception {
            //创建解析器对象
            saxreader reader=new saxreader();//虽然使用了saxreader,但是还是基于dom的解析方式
            //获取文档对象,还是dom树
            string path=thread.currentthread().getcontextclassloader().getresource("db-config.xml").touri().getpath();
            document document= reader.read(new file(path));
            //获取根元素
            element rootelement=document.getrootelement();
            //system.out.println(element.getname());
            //获取driver元素
            element driverelement =rootelement.element("driver");
            //在获取文本
            string driver=driverelement.gettext();
            //system.out.println(driver);
            //直接获取元素的文本内容
            driver=rootelement.elementtext("driver");
            system.out.println(driver);
            system.out.println(rootelement.elementtext("url"));
            system.out.println(rootelement.elementtext("user"));
            system.out.println(rootelement.elementtext("password"));
    
        }
    }
    

    输出结果

    使用dom4j开源项目(基于dom解析)解析xml文件(写)

    import org.dom4j.document;
    import org.dom4j.documenthelper;
    import org.dom4j.element;
    import org.dom4j.io.outputformat;
    import org.dom4j.io.xmlwriter;
    import java.io.file;
    import java.io.filewriter;
    /**
     * 使用dom4j开源项目解析xml文件(写)
     */
    public class text02 {
        public static void main(string[] args) throws exception {
            //创建文档对象
            document document= documenthelper.createdocument();
            //添加根元素
            element studentinfoelt=document.addelement("学生信息");
            //给学生信息节点添加子节点学生节点
            element studentelt=studentinfoelt.addelement("学生");
            //给学生节点添加id属性
            studentelt.addattribute("id","110");
            //给学生节点添加名字字节点
            element nameelt=studentelt.addelement("名字");
            //设置名字节点文本
            nameelt.settext("张三");
            //给学生节点添加性别字节点
            element sexelt=studentelt.addelement("性别");
            //设置名字节点文本
            sexelt.settext("男");
            //开始写
            outputformat format= outputformat.createprettyprint();
            format.setencoding("utf-8");
            string path="students.xml";
            xmlwriter xmlwriter=new xmlwriter(new filewriter(new file(path)),format);
            xmlwriter.write(document);
            xmlwriter.close();
    
        }
    }
    

    最终生成的xml文件

    总结

    本篇文章就到这里了,希望能给你带来帮助,也希望你能够多多关注www.887551.com的更多内容!