XML

一、基本概念

1.XML被设计用来结构化、存储以及传输信息
2.XML没有预定义的标签
3.没有任何行为的 XML
4.常见用途:
1)数据传送通用格式
2)配置文件
3)充当小型数据库

二、XML语法

1.文档声明
1)<?xml version=”1.0” encoding=”编码方式” standalone=”yes|no”?>

2)XML声明放在XML文档的第一行

3)XML声明由以下几个部分组成

    (1)version - -文档符合XML1.0规范

    (2)encoding - -文档字符编码,比如”gb2312”

    (3)standalone - -文档定义是否独立使用,standalone="yes“,standalone=“no”   默认
2.一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范
1)区分大小写,例如,<P>和<p>是两个不同的标记

2)不能以数字或"_" (下划线)开头

3)不能包含空格

4)名称中间不能包含冒号(:)

5)所有 XML 元素都须有关闭标签
3.属性
1)属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)

2)一个元素可以有多个属性,它的基本格式为:<元素名 属性名="属性值">

3)特定的属性名称在同一个元素标记中只能出现一次,属性值不能包括<, >, &

4)如果属性值有单引号,又有双引号,则需要使用实体: html->&nbsp; &copy

4.CDATA节
1)<![CDATA[

      ……

   ]]>

2)有些内容可能不想让解析引擎解析执行,而是当作原始内容处理,用于把整段文本解释为纯字符数据而不是标记的情况。包含大量<、>、&或者"字符

3)CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记

4)可以输入任意字符(除]]>外),不能嵌套

5)有时我们希望传递一些特殊字符, <>@!#$%^&*( 可以使用 CDATA节包括)

    示例:<intro><![CDATA[这个是好$$128qw8o8<Lk;>;akdf0sa98u329408><<K>>>学生]]></intro>

6)如何使用xml去传递小图片——可以把文件读取成一个byte[] ,然后放到 CDATA节,再传递
5.一个xml 文档中,有且只有一个根元素(元素标签节点)
6.对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理

三、dtd(xml文件约束)

1.基本概念
1)dtd ( document type definition  文档类型定义),该文件一般和xml文件配合使用, 主要的用途是约束xml

2)解决xml过于自由的问题
2.实体 <!ENTITY 实体名称 “实体内容”>
1)<!ELEMENT 班级 (学生+)>             <!--表示:班级元素内含有至少一个学生元素-->
   <!ELEMENT 学生 (名字,年龄,介绍)>    <!--表示:学生元素内可以含有名字,年龄,介绍等属性-->
    <!ELEMENT 名字 (#PCDATA)>          <!--表示:名字属性的值可以包含任何字符串,但是不能含有定义在该dtd中的其他元素-->
    <!ELEMENT 年龄 (#PCDATA)>
    <!ELEMENT 介绍 (#PCDATA)>

2)普通实体

    (1)语法格式(dtd中定义)        <!ENTITY 实体名称 “实体内容”>

3)引用方式(xml中引用)           

    (1)语法格式(dtd中定义,xml中引用)    &实体名称;

    (2)示例:在 dtd 中定义    <!ENTITY mycopy "我的公司版权">
           在xml中使用        &mycopy
3.IE5以上浏览器内置了XML解析工具:Microsort.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证
4.dtd 分类
1)内部dtd    直接在内部写,不用引入

2) 外部dtd   

    (1)引入本地dtd    <!DOCTYPE 根元素 SYSTEM ‘地址’>

     (2) 引入公共的 dtd    <!DOCTYPE 根元素 PUBLIC  ‘url地址’>

     (3) 内外部dtd        

        <!DOCTYPE 根元素  SYSTEM "DTD文件路径" [
            定义内容
        ]>

四、命名空间

1.在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突
2.XML 命名空间提供避免元素命名冲突的方法,使用前缀来避免命名冲突
3.XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:xmlns:namespace-prefix=“namespaceURI”
4.用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息

五、XML Schema(XSD)

1.基本概念
1)XML Schema 是基于 XML 的 DTD 替代者

2)XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)

3)遵守某个特定的XML Schema的XML文件称为XML Schema的一个实例文档
2.XSD能干什么
1)定义可出现在文档中的元素

2)定义可出现在文档中的属性

3)定义哪个元素是子元素

4)定义子元素的次序

5)定义子元素的数目

6)定义元素是否为空,或者是否可包含文本

7)定义元素和属性的数据类型

8)定义元素和属性的默认值以及固定值
3.Schema文档中,element元素定义了实例文档中可以含有的元素,attribute元素定义了实例文档中特定元素含有的属性,type属性表示对应的实例文档中对应的元素或属性的类型
4.示例
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans   
                      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd >

...内容

</bean>

六、XSLT


七、dom4j

1.dom4j生成xml(常用方法)
1)Document doc = DocumentHelper.createDocument();              // 创建一篇文档 

2)创建元素

    (1)Element root = doc.addElement("catalog");              // 创建元素,addElement可以返回一个Element

    (2)Element journalEl = new BaseElement("journal");        // 创建元素,添加元素节点
               root.add(journalEl);

3)journalEl.addAttribute("title", "XML Zone");                 // 增加元素属性以及元素属性值

4)authorEl.addElement("firstname").setText("Marcello");
   authorEl.addElement("lastname").addText("Vitaletti");        // 设置文本内容(可以链式操作)

5)doc.addDocType("catalog", null,file://c:/Dtds/catalog.dtd);  // 设置文档的DOCTYPE

6)String str = doc.asXML();
   doc.asXML();                                                 // asXML可以将文档或元素转换成一段xml字符串
   root.asXML();

7)output = new XMLWriter(new FileWriter(new File("file/catalog.xml")));
   output.write(doc);                                           // XMLWriter类可以把文档写入到文件中
   output.close();   

8)StringWriter out = new StringWriter();
   XMLWriter xmlWriter = new XMLWriter(out, format);
   xmlWriter.write(doc);                                        // 输出XML格式字符串s
   String s = out.toString();
   xmlWriter.flush();   
2.dom4j解析xml(常用方法)
1)获取document对象

    (1)Document document = DocumentHelper.parseText(text)     // 将字符串转换为xml文档

    (2)SAXReader reader = new SAXReader();
         Document   document = reader.read(new File("csdn.xml")); // 读取xml文件,获取document对象

2)Element root = document.getRootElement();                    // 获取文档的根节点

3)Element element=node.element(“四大名著");                    // 取得某个节点的子节点

4)String text=node.getText();                                  // 取得节点的文字

5) List nodes = rootElm.elements("csdn"); 
        for (Iterator it = nodes.iterator(); it.hasNext();) {   // 取得某节点下所有名为“csdn”的子节点,并进行遍历
            Element elm = (Element) it.next();
     }

6)Attribute attribute=root.attribute("id");                    // 取得某节点下的某属性

7)String text=attribute.getText();                             // 取得属性的文字

3.Xpath
1)主要方法

    (1) document.selectSingleNode("");              得到单个元素,如果为多个,默认取第一个 

    (2) document.selectNodes("");                   得到符合条件的元素集合 

2)   "/":绝对路径,需要层次分明;
     "//":相对路径,获取多个值;
     "@":进行条件筛选

3)项目中用到过的示例       String YJHM = docResult.selectSingleNode("//COL[@col_name='YJHM']").getStringValue();

八、jdom

1.jdom生成xml(常用方法)
1) Document doc = new Document();                 // 新建一个Document

2) Element root = new Element("root");            // 新建一个根元素 <root>  新建节点

3) root.setName("rootElement");                   // 修改根元素 的名字 

4) 添加属性

    (1)Attribute appntAttr = new Attribute("name", "SAM-SHO");
         appntEle.setAttribute(appntAttr);

    (2)appntEle.setAttribute("age", "28")

5) 添加文本内容

    (1)Text text = new Text("我是被保人,可以这样加文本"); 
         insuredEle.addContent(text);
         insuredEle.addContent("   ||我是追加");

    (2)appntEle.setText("我是投保人")

6) 在root节点下增加子节点(即在父节点下增加其子节点) ,addContent()会根据添加的类型来,所以感觉什么类型都可以

    (1)root.addContent(body)

    (2)eleList.add(appntEle); 
         eleList.add(insuredEle);
         root.setContent(eleList);

7) 把根节点增加到doc中

    (1)doc.setRootElement(root);

    (2)Document doc = new  Document(root)

8) format格式化也可以设置编码值,新建输出对象XMLOutputter,调用输出对象发放.outputString(doc)

    (1)Format format = Format.getPrettyFormat();
         format.setEncoding("GBK");
         XMLOutputter out = new XMLOutputter(format);
         String xmlStr = out.outputString(doc);
         System.out.println(xmlStr);// 打印到控制台
2.jdom解析xml(常用方法)
1)创建一个新的SAXBuilder,都会返回document对象

    (1)StringReader read = new StringReader(xmlDoc);        // 传字符串
         InputSource source = new InputSource(read);       
         SAXBuilder sb = new SAXBuilder();
         Document doc = sb.build(source);

    (2)SAXBuilder.build(FileInputStream("*.xml")            // 传xml文件

2)Element root = doc.getRootElement()                        // 获取根元素
   root.getName();                                            // 获取元素名称

3)root.getChildren();                                        // 获取该节点的所有子节点,返回List

4) Element.getChild("child节点名");                           // 获取字节点实例

5) Element.getText();                                         // 获取该节点的节点文本

6) Element.getAttribute("属性名");                            // 获取该节点属性名称
       root.getAttributes()                                   // 获取该节点下的所有属性名称

7) Attribute.getValue()                                       // 获取该属性的值

九、dom4j与jdom总结

1.优先选用dom4j,且解析用xml比较方便快捷,dom4j可以链式操作
( eg: document.getRootElement().element("insured").addElement("DESC").addText("新加的元素").addAttribute("属性", "值");)
2.生成xml思路:
1)先要有document对象
2)然后生成根节点
3)然后添加其他
4)最后输出
3.解析xml思路:
1)先获取document对象
2)然后找到根节点
3)然后查找其他
4.设置编码可以先调用一个Format类,然后调用里面的setEncoding方法,然后format作为参数传入XMLWriter

参考网址

xml入门

注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值