xml(1)

来源:互联网 发布:知乎热门话题 编辑:程序博客网 时间:2024/05/22 14:55

参考: w3school

XML入门

引入

    HTML, 超文本标记语言。    html语言语法是很松散的!          1)标签不区分大小写的!    2)标签可以不匹配的。    由w3c组织,针对html的语法缺陷,去设计了另一门,叫xml语言。    html语言的标签是固定的。

XML语言

XML 概念 可扩展标记语言 标记数量 是不固定的,可扩展的 作用 1)描述带关系的数据结构(作为软件的配置文件)
properties配置文件: 键值对 name=eric password=123456 xml可以描述包含与被包含的关系。
配置使用场景:
       1)框架(struts2 , hibernate,spring),xml作为框架的配 置文件
       2)tomcat服务器软件配置文件(web.xml server.xml)
2)装载数据(作为小型的“数据库”)。

XML作用

作为软件配置文件

    PCweb服务器:学生管理系统 - > 添加学生 -> name=张三,age=20  -> 提交到后台程序 -> 把数据存储到数据库中            两台通讯条件;                IP地址和端口            java代码: 根据ip和端口连接数据库服务器(ip改动会改变代码)            properties文件:                        ip=211.34.21.43                        port=20            xml文件:                <host-list>                    <host id="main">                        <ip> 211.34.21.43</ip>                        <port>20</port>                    </host>                    <host id="backup">                        <ip> 211.34.21.44</ip>                        <port>20</port>                    </host>                </host-list>    PC数据库服务器1:oracle数据库      211.34.21.43     20    PC数据库服务器2:oracle数据库  211.34.21.44     20

作为小型数据库

    教师管理系统      教师信息: 姓名  工龄  邮箱地址    传输数据:            字符串:  张|三|20|zhangsan@qq.com|.......|....    (格式不是行业规范的,不通用)            xml格式:                <teacher-list>                    <teacher>                        <name></name>                        <email></email>                        <workage></workage>                        ....                    </teacher>                    <teacher>                        <name></name>                        <email></email>                        <workage></workage>                        ....                    </teacher>                <teacher-list>              (xml是w3c组织的制定的标准)            json格式             获取字符串,截取字符串数据。    财务系统            发邮件给教师:                邮箱地址   姓名      方案1:财务系统中也存储了一套教师信息。数据维护成本比较高了!!!      方案2: 财务系统使用的教师数据从教师管理系统中发送过去的。

XML语法

标签

        <student>学生</student>   注意:        1)分带标签体的标签,也有空标签。        2)标签是区分大小写        3)标签一定要配对        4)标签中间不能含有空格        5)不能使用数字开头        6)如果没有指定名称空间的话, 标签名中间不能含有冒号        7)在同一个xml文件中,有且仅有一个根标签              

属性

        <student id="1"></student>注意:    1)一个属性分为属性名和属性值。属性名和值之间使用=号分割。    2)属性值一定要使用单引号或者双引号包含,不能省略,也不能单双混用!    3)一个标签内可以包含多个属性,但是不能出现同名的属性

注释

        <!--  xml --->

文档声明

        <?xml version="1.0"  encoding="码表"?>            version: xml的版本号            encoding: 表示解析xml文件内容时使用的码表            xml文件的编码问题:                     1)xml文件内容保存的编码(另存为-》选择编码保存)                2)解析xml文件内容的编码(   <?xml version="1.0" encoding="utf-8"?> )        以上两个编码必须保存一致,才能避免中文乱码问题。        注意:            如果在ecplise开发工具上,编写xml文件,那么xml文件内容自动按照文档声明的encoding的编码保存,所以不会中文乱码问题.

转义字符

        和html的转义字符.

CDATA块

把CDATA块中的内容全部原样输入
在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。
遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。
语法:<![CDATA[ 内容 ]]>

    <![CDATA[        <itcast>            <br/>        </itcast>    ]]>

处理指令(不用了,过时了)

        <?xml-stylesheet type="text/css" href="1.css"?>

XML解析

xml解析方式

    1)DOM解析:    2)SAX解析

DOM解析的工具

    Sun官方jaxp工具    jdom工具    dom4j工具: 三大框架读取xml文件的程序。(非官方的,第三方的)            dom for java            iphone4s     iphone for steven    

dom4j工具使用

    1)到dom4j的官方下载 。dom4j-1.6.1.zip    2)导入dom4j的支持jar包、            dom4j-1.6.1.jar核心包

DOM4J

DOM在java平台上的应用

dom4j是一套开源的类库。

集成的 XPath(路径查询语言)支持、 XML Schema(约束模式文档)支持。

具体操作:

获取到dom4j的jar包以及帮助文档。
将jar包设置到classpath中,就可以使用dom4j中提供的对象,进行xml文档的解析了。
查看帮助文档了解对象的使用。

XML文档基本操作——Document

获取xml文档对象Document。

        File xmlFile = new File(“test.xml”);        SAXReader reader = new SAXReader();        Document xmlDoc = reader.read(xmlFile);

XML文档基本操作——Element

获取根元素对象
Element root = xmlDoc.getRootElement();
获取根元素名称
String elementName = root.getName();
获取直接子元素对象
通过元素名称获取元素对象
Element element = root.element(“元素名称");
获取所有直接子元素对象集合
List elementList = root.elements();
获取元素对象中的文本
获取element元素的内部文本
String text = element.getText();
获取element子元素内部文本
String text = element.elementText(“子元素名称”);

XML文档基本操作——Attribute

获取元素属性对象
通过属性名获取元素属性对象
Attribute attribute = element.attribute(“属性名称");
通过索引获取属性对象
Attribute attribute = element.attribute(0);
获取所有属性对象集合
List attributeList = root.attributes();
获取属性值
通过属性对象
String value = attribute.getValue();
通过元素对象
String value = element.attributeValue(“属性名称”);

XML文档基本操作——创建

创建文档Document
Document document = DocumentHelper. createDocument();
创建元素
Element element = document.addElement(“元素名称");
创建属性
element. addAttribute(“属性名”,“属性值");
添加属性方法返回的是原元素对象。如同StringBuffer。
创建文本
element.addText(“文本");

XML文档基本操作——删除节点

remove(Element element)
remove(Attribute attribute)
remove(Text text)
……
remove(Node node)
Node接口的子类对象都可以移除
注意:remove是移除直接子节点时使用
parentElement.remove(childElement);

XML文档基本操作——建立xml文件

建立xml文件

FileWriter fw = new FileWriter(“students2.xml”);XMLWriter writer = new XMLWriter(fw);writer.write(document);writer.close();

建立漂亮的xml文档,可以指定字符编码

OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding(“GBK");XMLWriter writer = new XMLWriter(fw,format);

DOM 的问题

DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。
DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。
DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。

总结:
xml解析
dom解析方法: dom4j的工具

        查:            标签: element("name")                      elements("name")                    elements();                    getName() 标签名称                    getRootElement(): 根标签            属性: atrributeValue("name")  属性值                    atrribute("name")  对象                    atrributes()  属性对象列表                    getName() : 属性名                    getValue() 属性值            文本:                  getText();  当前标签的文本                  elementText("name")  子标签的文本        增:                DocumentHelper.createDocument()   文档                addElement("name");   标签                addAtribute("name","value" )  属性        改:                setValue()   修改属性值                addAttribute(”同名“) 修改属性值                setText()    修改文本内容        删除:                detach()   标签、属性                getParent().remove(标签/属性)