最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

【XML】

互联网 admin 15浏览 0评论

【XML】

【XML】

  • XML?
  • 写一个XML
    • 文档声明
    • encoding解析
    • 元素<>标签
    • 属性
    • 注释
    • 非法字符转义
    • CDATA区
  • XML解析方式
    • DOM解析
    • SAX解析
  • 针对XML解析方式给出的解决方案有哪些?
    • jaxp
    • jdom
    • dom4j
  • dom4j
    • 使用
    • 层级过多 —— XPath语法
    • XML约束
      • DTD
      • Schema
      • 名称空间的作用

XML?

  • 可拓展的标记语言
  • 用途:
    – 用来保存数据
    – 做配置文件
    – 数据传输载体
  • 倒状树形结构,标签嵌套

写一个XML

文档声明

<?xml version="1.0" ?> //解析时的解析器
<?xml version="1.0" encoding="gbk" ?> //解析编码
<?xml version="1.0" encoding="gbk" standalone="yes" ?> //yes依赖或关联外部文件,no没有依赖或关联

encoding解析

  • 在解析xml时用什么编码去解析 - - -解码
  • ANSI电脑默认编码gbk,编码和解码的方式不同,会导致解码失败,乱码

元素<>标签

  • 成对出现
  • 必须要有一个根标签
  • 空标签< />
  • 可以自己定义

属性

  • 元素中添加属性

注释

  • < >中间 !-- –
  • 快捷键ctrl shift /
  • 必须在文档声明下面

非法字符转义

  • &lt;—— <
  • &gt;—— >

CDATA区

  • 服务端给客户端传数据时会使用
    < ![CDATA][<> </> ]>
  • 作用:内容包含了标签形式但不想让xml解析

XML解析方式

面试题

DOM解析

  • 把所有文档存到内存形成树形结构
  • 整个树状结构称为document对象,标签称为element对象,属性称为attribute对象,文本称为text对象)—— 统称为Node节点
  • 若xml特别大,会内存溢出
  • 可以对文件进行增删操作

SAX解析

  • Simpel API for xml 基于事件驱动,读取一行解析一行
  • 不会造成内存溢出
  • 不能增删,只能查询

针对XML解析方式给出的解决方案有哪些?

jaxp

  • sun公司,比较繁琐

jdom

dom4j

  • 使用广泛

dom4j

使用

  • 下载dom4j的jar包 —— dom4j-1.6.1.jar
  • 放在lib下build path一下
  • 代码:
		try {//1.创建sax对象SAXReader reader = new SAXReader();//2.制定解析xml源Document document = reader.read(new File("src/com/zd/xmltest/demo.xml"));//3.得到元素(根元素:getRootElement)Element rootElement = document.getRootElement();//4.得到根元素的子元素(stu)(.elements()得到所有的子元素)List<Element> elements = rootElement.elements();//5.遍历所有的元素(.getText()获取文本)for(Element e : elements){System.out.println(e.element("name").getText());System.out.println(e.element("age").getText());}} catch (DocumentException e) {e.printStackTrace();}

层级过多 —— XPath语法

  • 快速定为到某一元素selectNodes( )
  • /从aaa/到bbb/找ccc
  • //把所有的aaa找出来
  • 在dom4j的下载包中的lib里 —— jaxen-1.1-beta-6.jar
  • 代码
		try {//1.创建sax对象SAXReader reader = new SAXReader();//2.制定解析xml源Document document = reader.read(new File("src/com/zd/xmltest/demo.xml"));//3.得到元素(根元素:getRootElement)Element rootElement = document.getRootElement();List<Element> list = rootElement.selectNodes("//name");for(Element e : list){System.out.println(e.getText());}} catch (DocumentException e) {e.printStackTrace();}

XML约束

DTD

  • 可读性差,不易解析
  • <!ATTLIST 元素名称 属性名称 类型>
  • <!ELEMENT 元素名称 类型名>
  • 新建文件xml dtd的
  • 创建一个XXX.dtd文件写入简单元素和复杂元素
  • 代码:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
  • 在xml中引入DTD文件
  • 网络引入:<>!DOCTYPE stus PUBLIC “//UNKNOWN/” “unknown.dtd”>
  • 本地引入:<>!DOCTYPE stus SYSTEM “demo.dtd”>
  • 内嵌定义:<>!DOCTYPE stus SYSTEM “demo.dtd”>
  • +代表一个或多个
  • *代表零个或多个
  • ?零个或一个
  • <!ELEMENT stu (name,age)>两个都有且顺序不变
  • <!ELEMENT stu (name|age)>两个元素有一个就行
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE stus [<!ELEMENT stus (stu)+><!ELEMENT stu (name,age)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)>
]>
<stus><stu><name>张三</name><age>18</age></stu>
</stus>

Schema

  • 就是xml,解析方便,为了替代,没有真正替代
  • 新建文件 xml schema 的 XXX.xsd
  • 留下名称空间(xmlns:w3c的标准)、目标名称空间(targetNamespace:下面定义的元素都要与这个名称空间绑定)、elementFormDefault:元素的格式化情况
  • 先写元素,分为简单复杂元素用complexType>sequence>嵌套
  • 代码
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="" targetNamespace="" elementFormDefault="qualified"><element name="stus"><complexType><sequence><element name="stu"><!-- 用来声明这是一个复杂元素的 --><complexType><sequence><element name="name" type="string"></element><element name="age" type="string"></element></sequence></complexType></element></sequence></complexType></element>
</schema>
  • 在xml中引入Schema文件
  • 在xml中写入根标签,提示选xsinsp选项
  • 加上xmlns=Schema文件的目标空间
  • xsi:schemaLocation="{namespace} {location}"
  • sequence maxOccurs=“unbounded”>可以不限子元素次数
<?xml version="1.0" encoding="UTF-8"?>
<stus
xmlns:xsi=""
xmlns=""
xsi:schemaLocation=" Teacher.xsd"><stu><name>张三</name><age>18</age></stu></stus>

名称空间的作用

  • 约束用DTD只能用一个
  • 用 Schema可以使用多个,声明名声空间时
  • xmlns:aa=“”
    xmlns:bb=“”
  • aa:元素

【XML】

【XML】

  • XML?
  • 写一个XML
    • 文档声明
    • encoding解析
    • 元素<>标签
    • 属性
    • 注释
    • 非法字符转义
    • CDATA区
  • XML解析方式
    • DOM解析
    • SAX解析
  • 针对XML解析方式给出的解决方案有哪些?
    • jaxp
    • jdom
    • dom4j
  • dom4j
    • 使用
    • 层级过多 —— XPath语法
    • XML约束
      • DTD
      • Schema
      • 名称空间的作用

XML?

  • 可拓展的标记语言
  • 用途:
    – 用来保存数据
    – 做配置文件
    – 数据传输载体
  • 倒状树形结构,标签嵌套

写一个XML

文档声明

<?xml version="1.0" ?> //解析时的解析器
<?xml version="1.0" encoding="gbk" ?> //解析编码
<?xml version="1.0" encoding="gbk" standalone="yes" ?> //yes依赖或关联外部文件,no没有依赖或关联

encoding解析

  • 在解析xml时用什么编码去解析 - - -解码
  • ANSI电脑默认编码gbk,编码和解码的方式不同,会导致解码失败,乱码

元素<>标签

  • 成对出现
  • 必须要有一个根标签
  • 空标签< />
  • 可以自己定义

属性

  • 元素中添加属性

注释

  • < >中间 !-- –
  • 快捷键ctrl shift /
  • 必须在文档声明下面

非法字符转义

  • &lt;—— <
  • &gt;—— >

CDATA区

  • 服务端给客户端传数据时会使用
    < ![CDATA][<> </> ]>
  • 作用:内容包含了标签形式但不想让xml解析

XML解析方式

面试题

DOM解析

  • 把所有文档存到内存形成树形结构
  • 整个树状结构称为document对象,标签称为element对象,属性称为attribute对象,文本称为text对象)—— 统称为Node节点
  • 若xml特别大,会内存溢出
  • 可以对文件进行增删操作

SAX解析

  • Simpel API for xml 基于事件驱动,读取一行解析一行
  • 不会造成内存溢出
  • 不能增删,只能查询

针对XML解析方式给出的解决方案有哪些?

jaxp

  • sun公司,比较繁琐

jdom

dom4j

  • 使用广泛

dom4j

使用

  • 下载dom4j的jar包 —— dom4j-1.6.1.jar
  • 放在lib下build path一下
  • 代码:
		try {//1.创建sax对象SAXReader reader = new SAXReader();//2.制定解析xml源Document document = reader.read(new File("src/com/zd/xmltest/demo.xml"));//3.得到元素(根元素:getRootElement)Element rootElement = document.getRootElement();//4.得到根元素的子元素(stu)(.elements()得到所有的子元素)List<Element> elements = rootElement.elements();//5.遍历所有的元素(.getText()获取文本)for(Element e : elements){System.out.println(e.element("name").getText());System.out.println(e.element("age").getText());}} catch (DocumentException e) {e.printStackTrace();}

层级过多 —— XPath语法

  • 快速定为到某一元素selectNodes( )
  • /从aaa/到bbb/找ccc
  • //把所有的aaa找出来
  • 在dom4j的下载包中的lib里 —— jaxen-1.1-beta-6.jar
  • 代码
		try {//1.创建sax对象SAXReader reader = new SAXReader();//2.制定解析xml源Document document = reader.read(new File("src/com/zd/xmltest/demo.xml"));//3.得到元素(根元素:getRootElement)Element rootElement = document.getRootElement();List<Element> list = rootElement.selectNodes("//name");for(Element e : list){System.out.println(e.getText());}} catch (DocumentException e) {e.printStackTrace();}

XML约束

DTD

  • 可读性差,不易解析
  • <!ATTLIST 元素名称 属性名称 类型>
  • <!ELEMENT 元素名称 类型名>
  • 新建文件xml dtd的
  • 创建一个XXX.dtd文件写入简单元素和复杂元素
  • 代码:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
  • 在xml中引入DTD文件
  • 网络引入:<>!DOCTYPE stus PUBLIC “//UNKNOWN/” “unknown.dtd”>
  • 本地引入:<>!DOCTYPE stus SYSTEM “demo.dtd”>
  • 内嵌定义:<>!DOCTYPE stus SYSTEM “demo.dtd”>
  • +代表一个或多个
  • *代表零个或多个
  • ?零个或一个
  • <!ELEMENT stu (name,age)>两个都有且顺序不变
  • <!ELEMENT stu (name|age)>两个元素有一个就行
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE stus [<!ELEMENT stus (stu)+><!ELEMENT stu (name,age)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)>
]>
<stus><stu><name>张三</name><age>18</age></stu>
</stus>

Schema

  • 就是xml,解析方便,为了替代,没有真正替代
  • 新建文件 xml schema 的 XXX.xsd
  • 留下名称空间(xmlns:w3c的标准)、目标名称空间(targetNamespace:下面定义的元素都要与这个名称空间绑定)、elementFormDefault:元素的格式化情况
  • 先写元素,分为简单复杂元素用complexType>sequence>嵌套
  • 代码
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="" targetNamespace="" elementFormDefault="qualified"><element name="stus"><complexType><sequence><element name="stu"><!-- 用来声明这是一个复杂元素的 --><complexType><sequence><element name="name" type="string"></element><element name="age" type="string"></element></sequence></complexType></element></sequence></complexType></element>
</schema>
  • 在xml中引入Schema文件
  • 在xml中写入根标签,提示选xsinsp选项
  • 加上xmlns=Schema文件的目标空间
  • xsi:schemaLocation="{namespace} {location}"
  • sequence maxOccurs=“unbounded”>可以不限子元素次数
<?xml version="1.0" encoding="UTF-8"?>
<stus
xmlns:xsi=""
xmlns=""
xsi:schemaLocation=" Teacher.xsd"><stu><name>张三</name><age>18</age></stu></stus>

名称空间的作用

  • 约束用DTD只能用一个
  • 用 Schema可以使用多个,声明名声空间时
  • xmlns:aa=“”
    xmlns:bb=“”
  • aa:元素
发布评论

评论列表 (0)

  1. 暂无评论