【Java】Java核心 73:XML (中)

简介: 5 XML的组成:字符区(了解)当大量的转义字符出现在xml文档中时,会使XML文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。CDATA (Character Data)字符数据区,格式如下:

5 XML的组成:字符区(了解)

当大量的转义字符出现在xml文档中时,会使XML文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。

CDATA (Character Data)字符数据区,格式如下:

<![CDATA[
  文本数据   < >  & ; " "
]]>
  1. CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)
  2. CDATA 部分由 <![CDATA[开始,由 ]]> 结束;

例如:

<![CDATA[
    if salary < 1000 then
]]

快捷模板:CD 回车

89dd0c2f4c2d43309ce016c192a72a38.png

注意:

CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。

标记 CDATA 部分结尾的 “]]>” 不能包含空格或折行。

小结:

原样显示(书写的内容不会被xml解析器解析)

6DTD约束(能够看懂即可)

1什么是DTD

DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。


2DTD约束的实现和语法规则(看懂dtd约束,书写符合规范的xml文件)

开发中,我们不会自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。


需求:接下来我们创建一个dtd约束文档,然后按照约束文档书写符合规范的xml文件。


我们先新建一个books.xml文件。


第一步:在项目下面创建一个dtd的文件夹,然后选中文件夹,鼠标右击,新创键一个books.xml文件


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTtoRvkX-1687767096552)(imgs\8.bmp)]

第二步:我们先书写books.xml文件中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book>
    <name>面试宝典</name>
    <author>锁哥</author>
    <price>78.8</price>
  </book>
  <book>
    <name>java从入门到精通</name>
    <author>黑旋风</author>
    <price>88.8</price>
  </book>
</books>

经过上述四步我们就将books.xml文件书写完毕,接下来我们开始书写DTD约束。

关于DTD约束我们能够看懂即可。如下所示就是上述books.xml文件引入了DTD约束。

简单的DTD约束就写好了,如下所示:

我们直接将如下约束复制到我们上述书写好的books.xml文件中即可,能够读懂即可。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
  1.在xml内部定义dtd约束的声明 : <!DOCTYPE 根元素 [元素声明]>
  2.xml的元素(标签)的声明: <!ELEMENT 元素名称 (元素内容)>
    <!ELEMENT books (book)> 表示books标签下是book标签
      <!ELEMENT book (name,author,price)> 表示的是book标签下出现的name,author,price子标签
      <!ELEMENT name (#PCDATA)> 表示name标签中出现的内容是文本
 -->
 <!DOCTYPE books [
  <!--约束根标签 book* 表示books标签下可以有多个book子标签
    * + ? 和正则表达式中表示的意思是一样的
    * :  0 1 n
    + : 1 n
    ? :  0 1
  -->
  <!ELEMENT books (book*)>
  <!--约束book标签-->
  <!ELEMENT book (name,author,price)>
  <!--约束name,author,price标签 
    但是这三个标签下就是文本了
    #PCDATA 表示标签下内容是文本
  -->
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
 ]>
<books>
  <book>
    <name>面试宝典</name>
    <author>锁哥</author>
    <price>78.8</price>
  </book>
  <book>
    <name>java从入门到精通</name>
    <author>黑旋风</author>
    <price>88.8</price>
  </book>
</books>

说明:


1)xml中出现的标签,也叫做元素。那么我们书写的约束可以规范xml中到底能出现哪些标签。除此之外都不能出现。


所以xml中出现的标签都需要我们开发者在dtd约束中声明一下。只有声明了这个标签,xml中才能出现这个标签。如果约束中没有声明,那么xml中就不能出现。


所以,xml中出现的标签需要使用如下的语法(也就是xml中元素的声明语法)。

在xml内部定义dtd约束的声明 :

  <!DOCTYPE 根元素 [元素声明]>

xml的元素(标签)的声明:

<!ELEMENT 元素名称 (元素内容)>

元素名:自定义。

元素内容包括:符号、数据类型和标签。

常见符号:? * + () |

常见数据类型:#PCDATA 表示内容是文本,不能是子标签。

标签:就是正常子标签。

2)由于 <!ELEMENT book (name,author,price)> 顺序是name,author,price,所以下面的顺序也得是:

<book>
    <name>面试宝典</name>
    <author>锁哥</author>
    <price>78.8</price>
</book>

前后顺序不能换。

接下来对上述代码的标签添加属性,比如给book属性添加一个address地址,表示将书存放到哪里。

添加属性之后的代码如下所示:

<!DOCTYPE books [
  <!--约束根标签 book* 表示books标签下可以有多个book子标签
    * + ? 和正则表达式中表示的意思是一样的
  -->
  <!ELEMENT books (book*)>
  <!--约束book标签-->
  <!ELEMENT book (name,author,price)>
  <!--约束name,author,price标签 
    但是这三个标签下就是文本了
    #PCDATA 表示标签下内容是文本
  -->
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
  <!ATTLIST book address CDATA "图书馆"
          id      ID    #REQUIRED
      >
 ]>
<books>
  <book address="藏经阁" id="a1">
    <name>面试宝典</name>
    <author>锁哥</author>
    <price>78.8</price>
  </book>
  <book id="a2">
    <name>java从入门到精通</name>
    <author>黑旋风</author>
    <price>88.8</price>
  </book>
</books>
<!DOCT

对上述声明属性进行解释说明:


元素名称: 表示该属性使用在哪个标签上;


属性名称: 表示在标签上添加的属性名字;


属性类型: 添加的属性类型。


属性类型有如下几种:


类型 描述

CDATA 值为字符数据 (character data)

(en1|en2|…) 此值是枚举列表中的一个值

ID 值为唯一的 id



默认值: 表示最开始给属性的默认值。


值 解释


值 属性的默认值


#REQUIRED 属性值是必需的


#IMPLIED 属性不是必需的


#FIXED value 属性值是固定的

相关文章
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
175 7
使用Java和XPath在XML文档中精准定位数据
|
4月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
208 1
|
6月前
|
XML Java 数据格式
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
43 1
|
6月前
|
XML Java 数据格式
java修改XML
java修改XML
|
6月前
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
88 4
|
2月前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
29 3
|
4月前
|
XML 存储 JavaScript
在 Java 中如何将 ArrayList 转换为 XML
【8月更文挑战第23天】
52 3
|
4月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
150 0
|
4月前
|
XML 自然语言处理 Java
Java 中的 XML 数据绑定
【8月更文挑战第22天】
32 0
下一篇
DataWorks