天天看点

XML学习一

1.eXtensible MarkUp Language

 * 可扩展标记性语言

 *用途:存储数据

2.XML用途

 *不同系统之间数据的传输

 *有利于提高数据的维护性

3.XML语法

  1)xml的文档声明:<?xml version="1.0" encoding="utf-8" ?> 写在第一行第一列 

       ios8859-1(不包含中文的编码方式)

    *xml中文乱码问题解决:设置编码和保存文件的编码保持一致!

 2)定义元素(标签)

    *标签有开始必须有结束标签

    *标签没有内容可以在标签内结束  <a/>

   *标签需要合理嵌套

   *一个xml中只能有一个根标签

   *在xml中会把空格和换行都当做内容来解析

  **xml中标签命名规则:

      xml中区分大小写、名称不能以数字或者下划线开头、不能以xml、XML、Xml开头、不能包含空格和冒号

  3)xml属性定义

  4)xml注释 :<!-- 注释不能嵌套-->

  5)xml中的特殊字符(一些转义字符)

  6)CDATA区:可以解决多个字符都需要转义的操作

     <![CDATA [ 内容 ] ]> 把特殊字符当做文本内容

  7)PI指令:在XML中设置样式,对中文标签不起作用

 4.xml约束

   使得标签内的内容符合正常的规范或者常识

   xml约束技术:dtd约束 和schema约束

  1)dtd约束:

        --》看xml中有多少个元素,有几个元素再dtd中写多少个ELEMENT

         --》判断元素是简单元素还是复杂元素(有子元素)

        --》在xml中引入dtd文件

<!DOCTYPE 根元素名称 SYSTEM "DTD文件路径">
           
XML文件 人:姓名、年龄
引入dtd文件
<!DOCTYPE person SYSTEM "test.dtd">
<person>
     <name>dzg</name>
     <age>23</age>
</person>

test.dtd文件内容:

<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
           

    2)dtd文件的三种引入方式

     *引入外部文件

    *内部dtd

     <!ELEMENT person [

        内容

    ]>

    *引入外部的dtd文件,网络上的dtd文件

5、DTD语法格式 <!ELEMENT 元素名 约束>

简单元素:

     *(#PCDATA)元素为字符串类型

    * EMPTY  元素为空

    * ANY 任意

 复杂元素:

    *表示子元素出现的次数 +:出现一次或者多次、*:0次或者多次、?:0次或者一次

w3c文档有很多的实例

5.XML解析(*****)

xml解析方式:

   1)dom方式

   2)sax方式

XML学习一

  想要解析XML文件,首先要提供解析器,通过api方式提供

* sun公司提供 jaxp

*dom4j组织提供 dom4j(实际开发中使用最多)

Jdom提供的jdom

6.jaxp的api查看

 jaxp是java se的一部分

  jaxp解析器在jdk在javax.xml.parsers包里面

关于类中的方法查看API文档
           
四个类:分别针对dom和sax解析使用的类

***dom:
   DocumentBuilder:解析器类
      抽象类,不能new
      此类的实例可以从DocumentBuilderFactory.newDocumentBuilder()方法获取
   DocumentBuilderFactory:解析器工厂
      抽象类,不能new
      newInstance()获取DocumentBuilderFactoy的实例
***sax:
   SAXParser:解析器类
      
   SAXPaeserFactory:解析器工厂
           
JAXP解析xml文件实例:

public class TestJaxp {

	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		/*
		 * 1.创建文件解析工厂
		 * 2.根据解析工厂创建解析器
		 * 3.解析xml文件返回document
		 * 4.获取所有name元素的值
		 * 5.返回集合并遍历,输出所有name
		 */
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse("src/person.xml");
		NodeList nodeList = document.getElementsByTagName("name");
		for(int i=0;i<nodeList.getLength();i++) {
			Node node = nodeList.item(i);
			String str = node.getTextContent();
			System.out.println(str);
		}
	}
}

xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<person>
    <p1>
	    <name>zhangsan</name>
	    <age>23</age>
    </p1>
    <p1>
	    <name>wangba</name>
	    <age>23</age>
    </p1>
</person>
           

7.使用jaxp添加节点

   修改标签内容

 删除标签节点

 遍历标签节点