• XML——基本语法及使用规则


    目录

    1、XML简介 

    1.1、什么是XML?

    1.2、XML和HTML之间的区别?

    1.3、XML的作用

    1.4、XML自定义标签

    2、XML的语法结构

    2.1、XML命名规则

    2.2、XML声明

    2.3、XML元素

    2.4、XML注释

    2.5、XML属性

    2.6、CDATA区

    3、XML约束

    3.1、DTD约束

    3.2、DTD约束抽取

    3.3、DTD的属性

    3.4、Schema约束

    4、数据解析及常见解析XML方式

    4.1、DOM方式

    4.2、SAX方式

    4.3、JDOM方式

    4.4、DOM4J


    1、XML简介 

    1.1、什么是XML?

    XML 指可扩展标记语言(EXtensible Markup Language)。

    XML 是一种很像HTML的标记语言。

    XML 的设计宗旨是传输数据,而不是显示数据。

    XML 标签没有被预定义。您需要自行定义标签。

    XML 被设计为具有自我描述性。

    XML 是 W3C 的推荐标准。

    1.2、XML和HTML之间的区别?

    XML不是HTML的替代,XML被设计是用来传输和存储数据的,其重点是数据的内容。

    而HTML被设计是用来显示数据的,其重点是数据的外观样式。 

    XML 是独立于软件和硬件的信息传输工具 

    1.3、XML的作用

    通常会把xml当作一个配置文件去使用。(在Spring Struts Hibernate Springmvc Mybatis等框架中作为配置文件)。

    1.4、XML自定义标签

    标签没有在任何 XML 标准中定义过(比如 )。这些标签是由 XML 文档的创作者发明的。XML 语言没有预定义的标签。HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如

    等等)。XML 允许创作者定义自己的标签和自己的文档结构。

    2、XML的语法结构

    2.1、XML命名规则

    XML 元素必须遵循以下命名规则:

    1、名称可以包含字母、数字以及其他的字符。

    2、名称不能以数字或者标点符号开始。

    3、名称不能以字母 xml(或者 XML、Xml 等等)开始。

    4、名称不能包含空格。

    5、可使用任何名称,没有保留的字词。

    最佳命名习惯

    使名称具有描述性。使用下划线的名称也很不错:

    名称应简短和简单,比如:,而不是:

    避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为您想要从 first 里边减去 name。

    避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。

    避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。

    XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。

    在 XML 中,éòá 等非英语字母是完全合法的,不过需要留意,您的软件供应商不支持这些字符时可能出现的问题。

    2.2、XML声明

    XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:

    2.3、XML元素

    XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

    1. 写法:<标签名>
    2. 在xml中,同样的去区分单标签和双标签
    3. 单标签 :<标签名 />
    4. 双标签:<标签名> 内容(文本,其他标签)
    5. 标签名是我们自己定义的。建议大家。采用标识符的命名规则去给一个标签起名字。(数字字母下划线,并且数字不能作为开头)
    6. 案例:
    7. 描述 书籍的信息。书名字,作者,单价。
    8. 标签的书写注意事项:
    9. 1、xml中的所有标签必须闭合。
    10. 2、xml中的标签名称严格区分大小写。<User> <user>
    11. 3、在xml标签名中间不要书写空格,或者 冒号 逗号 等符号。
    12. 标签的名字不要有空格一类特殊符号。
    13. 4、标签名不要以数字开始。(可以按照标识符的方式给标签去命名)
    14. 5、书写xml标签时 ,标签不能互相嵌套。
    15. <age>23<name>zhangsan>age>name>
    16. 6、所有的xml文件只能有一个根标签。
    17. 7、我们可以通过浏览器来校验xml文件的格式是否正确。
    1. <books>
    2. <book>
    3. <name>三国演义name>
    4. <author>罗贯中author>
    5. <price>39.9price>
    6. <version>1.0version>
    7. book>
    8. books>

    2.4、XML注释

    xml中的注释和html中的注释的写法是一样的。

    -------本身就是多行注释了。

    注意:注释的内容,会在浏览器中显示出来。

    书写注释的时候,内容尽可能的去避免 -- 字符

    2.5、XML属性

    属性:书写在标签内的。对标签的数据进行扩展。对标签的进一步描述。

    写法:<标签名 属性名=“属性值” 属性名=“属性值”> 属性名也是自定义的。

    注意问题:

    1、如果是双标签,属性要书写在开始标签内

    2、属性名不要出现空格,“;”“:” 特殊字符不要出现。

    3、属性值必须用单引号,或者双引号包围起来。

    2.6、CDATA区

    CDATA区:可以输出特殊字符:原样的显示书写在CDATA的内容。会原封不动的显示出去。

    我们可以使用预定义的实体,去替代一些特殊字符的输出。

    注意实体的写法:&实体的名字;

    <<小于
    >>大于
    &&和号
    &apos ;'单引
    " ;""双引
    1. <books>
    2. <book>
    3. <name>西游记name>
    4. <author sex="男" address="郑州"><吴承恩>author>
    5. <pirce>50pirce>
    6. <version>1.2version>
    7. book>
    8. books>

    3、XML约束

    什么是XML约束:对xml中的内容进行限制哪些怎么写有一定的约束限制,其实后面我都都是把xml作为配置文件来使用,所以我必须得看的懂xml中约束。

    DTD目的: 可以看懂DTD文件,基于这个DTD文件可以写一个符合约束的xml文件。

    XML约束分为两种: DTD约束、 Schema约束。

    3.1、DTD约束

    元素定义

    语法关键字作用示例
    #PCDATA代表文本元素,里面的内容必须是文本
    EMPTY不能包含任何子元素和文本,仅可以使用属性
    (e1,e2)代表混合元素,表示这个标签里面还有其他的节点

    元素的限制

    限制格式
    元素可以出现的次数0或1:?          0~N:*         1~N:+

    这个的元素次数指的是:例如下面案例books根目录下book这个标签能够出现的次数。 

    1. books [
    2. books (book*)>
    3. book (name,author,price,version)>
    4. name (#PCDATA)>
    5. author (#PCDATA)>
    6. price (#PCDATA)>
    7. version EMPTY>
    8. ]>
    9. <books>
    10. <book>
    11. <name>name>
    12. <author>author>
    13. <price>price>
    14. <version/>
    15. book>
    16. books>

    当在xml文件中加入约束后,输入标签时会自动导入其子类标签。

    3.2、DTD约束抽取

    把DTD约束写到一个xml文件中有个弊端,就是只能这一个文件能够使用,为了方便以后多个文件可以共有这个DTD约束,我们需要把约束写到单独的一个.dtd文件中。

    book.dtd文件

    1. books (book*)>
    2. book (name,author,price,version)>
    3. name (#PCDATA)>
    4. author (#PCDATA)>
    5. price (#PCDATA)>
    6. version EMPTY>

    books.xml文件

    1. books SYSTEM "book.dtd">
    2. <books>
    3. <book>
    4. <name>西游记name>
    5. <author>吴承恩author>
    6. <price>29.9price>
    7. <version/>
    8. book>
    9. <book>
    10. <name>水浒传name>
    11. <author>施耐庵author>
    12. <price>39.9price>
    13. <version/>
    14. book>
    15. books>

    3.3、DTD的属性

    定义标签中的属性
    attribute  list ,可以定义多个属性,为一个标签定义多个属性。
    标签名:属性属于那个标签的。
                    属性名 属性的类型(CDATA  (EN1|EN2)   ) 属性的约束(REQUIRED)

    为了便于阅读。把多个属性进行换行。
                    属性名 属性的类型 属性的约束
                    属性名 属性的类型 属性的约束

    解释
    CDATA表示文本
    #REQUIRED属性是必须的
    #IMPLIED属性非必须的
    #FIXED属性为固定字符串值

     book.dtd文件

    1. books (book*)>
    2. book (name,author,price,version)>
    3. name (#PCDATA)>
    4. author (#PCDATA)>
    5. price (#PCDATA)>
    6. version EMPTY>
    7. author
    8. name CDATA #REQUIRED
    9. age CDATA #REQUIRED
    10. sex CDATA #IMPLIED
    11. sco CDATA #FIXED "100"

    book.xml文件

    1. books SYSTEM "book.dtd">
    2. <books>
    3. <book>
    4. <name>西游记name>
    5. <author name="吴承恩" age="48" sex="男" sco="100">吴承恩author>
    6. <price>29.9price>
    7. <version/>
    8. book>
    9. <book>
    10. <name>水浒传name>
    11. <author name="施耐庵" age="58" sex="男" sco="100">施耐庵author>
    12. <price>39.9price>
    13. <version/>
    14. book>
    15. books>

    3.4、Schema约束

    1、XML Schema是基于 XML 的 DTD 替代者。

    2、XML Schema 符合XML语法结构,并且是可扩展的,后缀名为.xsd(xml schema document)。

    3、XML Schema更容易地描述允许的文档内容,以及约束定义, 并支持名称空间。

    配置xsd文件 

    1. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    2. xmlns="http://www.example.org/bookSchema"
    3. targetNamespace="http://www.example.org/bookSchema"
    4. elementFormDefault="qualified">
    5. <xs:element name='books'>
    6. <xs:complexType>
    7. <xs:sequence maxOccurs='unbounded '>
    8. <xs:element name='book'>
    9. <xs:complexType>
    10. <xs:sequence>
    11. <xs:element name='name' type="xs:string"/>
    12. <xs:element name="author" >
    13. <xs:complexType>
    14. <xs:simpleContent>
    15. <xs:extension base="xs:string">
    16. <xs:attribute name="name" type="xs:string"/>
    17. xs:extension>
    18. xs:simpleContent>
    19. xs:complexType>
    20. xs:element>
    21. <xs:element name='price' type="xs:double"/>
    22. xs:sequence>
    23. xs:complexType>
    24. xs:element>
    25. xs:sequence>
    26. xs:complexType>
    27. xs:element>
    28. xs:schema>

    引入xsd文件 

    1. <books xmlns="http://www.example.org/bookSchema"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.example.org/bookSchema book.xsd">
    4. <book>
    5. <name>红楼梦name>
    6. <author>曹雪芹author>
    7. <price>29.9price>
    8. book>
    9. <book>
    10. <name>三国演义name>
    11. <author>罗贯中author>
    12. <price>39.9price>
    13. book>
    14. books>

    4、数据解析及常见解析XML方式

    4.1、DOM方式

    DOM(Document Object Model). 是用与平台和语言无关的方式表示XML文档的官方W3C标准,将标记语言文档一次性加载进内存,在内存中形成一颗dom树。

    优点

    操作方便,可以对文档进行CRUD的所有操作

    缺点

    通常需要加载整个XML文档来构造层次结构,消耗资源大。

    4.2、SAX方式

    SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。逐行读取,基于事件驱动的。

    什么是事件驱动:一种基于回调机制的程序运行方法。由外至内一层一层解析。

    优点

    ①不需要等待所有数据都被处理,分析就能立即开始。 ②只在读取数据时检查数据,不需要保存在内存中。 ③可以在某个条件得到满足时停止解析,不必解析整个文档。 ④效率和性能较高,能解析大于系统内存的文档。

    缺点

    只能读取,不能增删改

    很难同时访问同一文档的不同部分数据,不支持XPath

    4.3、JDOM方式

    JDOM(Java-based Document Object Model)的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。

    优点

    ①使用具体类而不是接口,简化了DOM的API。 ②大量使用了Java集合类,方便了Java开发人员。

    缺点

    ①没有较好的灵活性。 ②性能较差。 

    4.4、DOM4J

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。性能优异功能强大简单易用开放源代码。  

    优点

    ①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。 ②支持XPath。 ③有很好的性能。

    缺点

    大量使用了接口,API较为复杂

    接下来我就演示一下使用DOM4J读取一下xml文件里的内容输出到控制台。

    首先我们需要在目录下创建一个lib包,把下面的链接地址中的jar包放到lib包内,并手动添加到模块。

     

    DOM4J的jar包链接如下:

    链接:https://pan.baidu.com/s/1gwt_vNjALoae1ZsfKh-t_Q?pwd=6ly7 
    提取码:6ly7 

    Book.xml文件

    1. <books>
    2. <book id="1">
    3. <name>西游记name>
    4. <author>吴承恩author>
    5. <price>29.9price>
    6. <version/>
    7. book>
    8. <book id="2">
    9. <name>水浒传name>
    10. <author>施耐庵author>
    11. <price>39.9price>
    12. <version/>
    13. book>
    14. books>

    测试类

    1. public class DOMTest {
    2. public static void main(String[] args) throws DocumentException {
    3. SAXReader reader=new SAXReader();
    4. Document document = reader.read("Book.xml");
    5. //获取根目录元素对象
    6. Element dom = document.getRootElement();
    7. //获取所有根目录下的子节点
    8. List elements = dom.elements();
    9. for (Element element : elements) {
    10. //输出子节点的属性id值
    11. System.out.println(element.attributeValue("id"));
    12. //输出name值
    13. System.out.println(element.elementText("name"));
    14. //输出author值
    15. System.out.println(element.elementText("author"));
    16. //输出price值
    17. System.out.println(element.elementText("price"));
    18. System.out.println("----------------");
    19. }
    20. }
    21. }

  • 相关阅读:
    Yolov8小目标检测(18):通道优先卷积注意力(Channel Prior Convolutional Attention,CPCA)| 中科院 2023.6发布
    浅谈Java-String到底是值传递还是引用传递?
    两数之和问题
    在Anaconda环境下创建django项目
    项目问题-Invalid bound statement (not found),mybatis出现的问题
    vulnhub_driftingblues7靶机渗透测试
    【实用技巧】Unity的Text组件实用技巧
    计算机视觉中的数据预处理与模型训练技巧总结
    Vue源码总结
    洛谷-P1007-魔法少女
  • 原文地址:https://blog.csdn.net/select_myname/article/details/126262534