XML

一.XML概述
     定义:Extensible Makeup Language(可扩展标记语言);
     作用:
         1.存储数据,有良好的存储格式,多种语言通用
         2.作为配置文件,许多框架都使用xml作为配置文件
     语法:
         1.文件后缀名必须为.xml;
         2.文档声明必须写在第一行,且前面不能空格,一般写法:<?xml version="1.0" encoding="UTF-8"?>;
         3.注释格式:<?--    -->(ST快捷键 ctrl+shift+/);
         4.元素(标签):xml文件的基本组成部分,由开头和结尾组成:开头由一对<>和元素名组成;结尾<>内多一正斜杠,如:<Peson></Person>;
         5.根元素:最先出现的元素,根元素只有一对;
         6.元素体:元素两个<>中出现的文本,如<Person>text</Person>中的text称为元素体;
         7.属性:元素的组成部分,写在开始标签里.属性名必须以英文字母开头,不能有空格且不能重复,格式为:属性名=属性值,属性值需用""或‘‘包裹,如<Person id="001"></Person>,id即为属性
         8.转义字符:> ----- &lt; < ---- &gt; " ---- &quot; ‘ ---- &apos; & ---- &amp;
         9.CDATA区:格式<?[CDATA[--内容--]]>,内容区直接原样展示,不被xml解析器解析;
     关于文档声明的补充:
         <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
         1.声明语句必须有version属性,encoding和standalone是可选的;
         2.三个属性同时存在时必须按上述顺序排列;
         3.如果没有声明encoding属性,则解析时默认采用uft-8或utf-16;如果不声明,解析器也不支持utf-8吉utf-16,则引起解析出错;
         4.standalone只有两个值"yes"或"no",no表示文档可能依赖于一个DTD文件存在;yes表示可以独立存在.

二.XML解析
     两种方式:
         SAX解析:逐行解析;效率高,不易出现内存不足的情况;但是只能对xml解析,且不能进行增删改的操作
         DOM解析:将整个文件加载到内存中,形成一个Document对象,对该对象进行解析,优点是可以进行增删改的操作,但是容易出现内存不足的情况
     解析工具:常用工具为dom4j.jar包
         JAXP:sun公司提供支持DOM和SAX开发包

?        JDom:dom4j兄弟

?        jsoup:一种处理HTML特定解析开发包

?        dom4j:比较常用的解析开发包,hibernate底层采用。

三.Dom4j的常用API
     SAXReader类:
         定义:public class SAXReader extends Object
         构造方法:
             SAXReader()
         普通方法:
             public Document read(String systemId) throws DocumentException{}:根据路径读xml文件,得到一个文档对象!
     Document接口:
         定义:public interface Document extends Branch
         普通方法:
             public Element getRootElement(){}:获取根标签对象
     Element接口:
         定义:
             public interface Element extends Branch
         普通方法:
             public Element element(String name){}:Returns the first element for the given local name and any namespace.
             public Element element(QName qName){}:Returns the first element for the given fully qualified name.
             ==========================================================================================================
             public List elements(){}:获取该标签对象下的所有子标签
             public List elements(String name){}:面向该元素对象,获取指定名称的子标签
             public String attributeValue(String name){}:面向元素对象,根据属性名获取属性值
             public String getText(){}:面向该元素对象,获取元素体;(如果元素体是一个标签,会得到null)
             =============================================================================================
             public Iterator elementIterator(){}:Returns an iterator over all this elements child elements.
             public Iterator elementIterator(QName qName){}:Returns an iterator over the elements contained in this element
                                                             which match the given fully qualified name.
             public Iterator elementIterator(String name){}:Returns an iterator over the elements contained in this element
                                                             which match the given local name and any namespace.   
             =================================================================================================================                                                                                                                   
             public String elementText(String name){}:
             public String elementText(QName qname){}:

Node接口:
         定义:public interface Node extends Cloneable
         普通方法:
             public String getName(){}:返回该节点对象的名称

代码演示:

  1 import java.util.List;
  2      import org.dom4j.Document;
  3      import org.dom4j.Element;
  4      import org.dom4j.io.SAXReader;
  5
  6      public class XmlTest {
  7          public static void main(String[] args) throws Exception {
  8              // 创建SAXReader对象
  9             SAXReader sax = new SAXReader();
 10              // 获取Document对象
 11             Document document = sax.read("my.xml");
 12              // 面对Document对象获取根节点
 13             Element element = document.getRootElement();
 14
 15              // 面向根节点元素,获取其下的名为servletClass子元素集合
 16             List<Element> servletClassList = element.elements("servletClass");
 17              // 迭代
 18             for (Element e : servletClassList) {
 19                  // 面向一级子元素获取其元素体
 20                 String text = e.getText();
 21                  // 获取元素名
 22                 String name = e.getName();// 多态
 23                 // 获取属性值
 24                 System.out.println(name + "结点元素的元素体为" + text);
 25              }
 26
 27              // 面向根节点元素,获取其下的名为servlet子元素集合
 28             List<Element> servletList = element.elements("servlet");
 29              for (Element e : servletList) {
 30                  String idValue = e.attributeValue("id");
 31                  String nameValue = e.attributeValue("name");
 32                  System.out.println("servlet结点元素的ID为" + idValue);
 33                  System.out.println("servlet结点元素的name为" + nameValue);
 34              }
 35          }
 36      }

三.DTD约束
     概述:文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
     作用:用于限定xml的编写格式或内容;
     语法:
         1.Dtd文件的后缀名必须是.dtd;
         2.在文件的第一行第一列,写的是xml的文档约束;
         3.<!ElEMENT 元素名(对元素的约束) >
         4.限定属性的代码格式:
             <!ATTLIST  要限定的元素名 属性名 属性的数据类型   该属性是否必须有>
         5.ID 类型:表示该属性值必须保证整个xml文件中唯一;
             #REQUIRED:该属性必须添加
             #IMPLIED:该属性可选;
         6.CDATA :表示文本数据类型,但是xml解析器不能解析;
         7.#PCDATA:表示文本数据类型,但是xml解析器要解析;
     与XML关联:3种
         1.针对某个xml文件中,直接写DTD的代码,只针对该xml一个文件生效;
             <?xml version="1.0" encoding="utf-8" ?>
             <!DOCTYPE beans [
                 ... //具体的语法
             ]>
             <beans>
             </beans>
         2.单独写一个dtd文件,在xml中引入要遵守的dtd约束;可以针对多个xml文件生效;一般用在项目组或企业中;
             <?xml version="1.0" encoding="utf-8" ?>
             <!DOCTYPE beans SYSTEM "bean.dtd">
             <beans>
             </beans>
         3.单独写一个dtd文件,放在网上,所有可以联网的电脑,都可以引用该dtd约束;一般框架的编写者,会提供这样的约束;
         <?xml version="1.0" encoding="UTF-8"?>
         <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
         "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
         <beans>
        
         </beans>

四.Schema约束
     概述:Schema约束文件的后缀名必须是:xsd;
     语法格式:
         1. <element> 声明元素(标签)
         2. 每一个元素必须确定类型:
                 complexType 复杂类型,该元素的内容会详细描述;
                 simpleType 
                     简单类型,一般不用,大部分都是复杂类型;该元素的内容都是纯文本
         3. 需要继续明确子标签顺序
                     <choice> 选择, ()
                     <sequence> 顺序 ,
                     <all>      任意
                     minOccurs 最少出现次数
                     maxOccurs 最大出现次数,
                     unbounded 不限制
         4.<attribute>用于给元素声明属性的
                     use 设置属性使用,
                     optional可选
                     required必选

时间: 2024-10-14 04:18:01

XML的相关文章

Maven中,pom.xml文件报错

一:错误消息,如下图: aus 原因是本地仓库在org.codehaus.plexus:plexus-uils:pom:3.0.20下面没有jar文件,只有一个plexus-utils-3.0.20.pom.lastUpdated,如下图: 解决:将该文件夹删掉,然后右击项目:Maven->Update Project就可以了 若pom.xml里面还有类型的报错,就像这样解决就OK了

微信5.4 AndroidManifest.xml

1 <?xml version="1.0" encoding="utf-8" ?> 2 - <manifest android:versionCode="462" android:versionName="5.4.0.48_r794734" android:installLocation="auto" package="com.tencent.mm" xmlns:and

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

logback-spring.xml的schema

<?xml version="1.0" encoding="utf-8" ?> <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"> </configuration>

Web.xml 中 metadata-complete 介绍

Servlet 3.0 的部署描述文件 web.xml 的顶层标签 <web-app> 有一个 metadata-complete 属性, 该属性指定当前的部署描述文件是否是完全的. 如果设置为 true,则容器在部署时将只依赖部署描述文件,忽略所有的注解(同时也会跳过 web-fragment.xml 的扫描,亦即禁用可插性支持,具体请看后文关于 可插性支持的讲解): 如果不配置该属性,或者将其设置为 false,则表示启用注解支持(和可插性支持).

关于java解析xml文件出现的问题

问题1:导入javax.xml.parsers.DocumentBuilderFactory出现问题,如图: 解决办法是:由于创建工程时有个默认的jre,重新创建工程改掉就解决了,如图: 问题2:出现1 字节的 UTF-8 序列的字节 1 无效,解决办法: 使用记事本打开xml文件--点击文件-另存为-修改编码方式为UTF-8 -覆盖保存,如图: 以后出现问题还会补充

Android 编译错误——布局 Error parsing XML: not well-formed (invalid token)

在修改了Android布局文件后,编译出现Error parsing XML: not well-formed (invalid token). 首先先排查xml文件的编码格式是否为UTF-8, <?xml version="1.0" encoding="utf-8"?> ,注意,从别处copy的要留意编码格式! 还有各个标签是否有遗漏,把鼠标箭头移到出错误的layout上 点击鼠标右键选择Source然后再选Format. 都没有问题,结果发现报错处(

MyBatis应用开发(2)应用之开发方式XML文件篇

1.1. 开发方法 有三种使用MyBatis的方法: (1)使用XML配置文件的方式. (2)使用注解方式. (3)使用API方式. 1.2. XML方式 1.2.1. 开发步骤 目标:使用MyBatis从数据库中查询t_person表的全部记录. MyBatis使用XML文件来配置数据库中的记录与Java对象之间的映射关系,实现了SQL语句和Java代码的分离. 使用MyBatis 的XML配置方式开发数据库应用的步骤如下所示: (1)编写POJO类Person. (2)编写Mapper接口P

web.xml 中的listener、filter、servlet加载及一些配置

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servlet