一.什么是格式良好XML
格式良好的XML(eXtensible Markup Language)是指XML文档按照规范的语法和标准的标记规则编写,其中每个元素都被正确地嵌套和关闭,属性值使用正确的引号,并且符合XML相关规范。这种格式的XML文档能够被最终用户以及计算机程序正确地读取和解析,并且具有容易阅读和维护的优点。
为什么要学XML:
与其他格式兼容:XML是一种非常灵活的文本格式,可以轻松地与许多其他软件和语言一起使用。它通常被用作各种领域的数据交换格式,并被广泛应用于Web服务、数据库、电子商务、移动应用等领域。
处理复杂数据:XML在数据建模和存储方面非常强大,可以帮助处理和组织任意结构的数据。由于XML的可扩展性和丰富的标记语言,它可以轻松地表示复杂的数据关系和包含递归元素,使其成为处理数据密集型的应用程序的极佳选择。
易于理解和学习:XML使用标记和结构来定义文本中的数据,使其易于读取、解析和理解。它的语法简单明了,与HTML类似,因此易于学习和实现。
支持数据验证和数据交换:XML可以使用DTD或Schema等结构来验证数据,确保数据的正确性和完整性;同时,XML也可以用作各种系统之间的通用格式,便于系统之间的数据交换和互操作。
XML的作用:
数据交换和存储:XML是一种通用的数据格式,可以用于数据交换、存储和传输,与Python、Java、PHP等各种编程语言和Web技术无缝集成,广泛应用于电子商务、金融、医疗、移动应用和半导体制造等领域。
数据建模和描述:XML可以用作数据建模语言,用于描述数据结构、元数据、文档和业务规则。它可以根据特定的需求定义合适的数据模式,并提供有效的数据字典和说明文档。
数据验证和处理:XML可以通过定义相应的DTD或Schema来验证和处理数据。这些定义规则可确保XML文档与特定模式或格式相匹配,并在应用程序处理和处理数据时更加可靠和稳定。
数据发布和检查: XML可以用于发布和共享信息,例如RSS、Atom等网站新闻源,以及SOAP、REST等Web服务。XML也可以用于检索和查询文档和数据库,如XPath和XQuery等查询语言。
1.数据交互:
这段代码演示如何解析名为"employees.xml"的XML文件。每个employee元素都包含包括id、firstName和lastName在内的信息。在这个例子中,我们使用DOM解析器来读取XML数据,并将其转换为Java中的对象,以便在Java代码中进行操作。
public class XmlParserExample { public static void main(String[] args) { try { // 创建DOM Parser DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); // 解析XML文件 Document doc = builder.parse("employees.xml"); // 获取所有 employee 元素 NodeList employees = doc.getElementsByTagName("employee"); // 遍历每个 employee 元素 for (int i = 0; i < employees.getLength(); i++) { Element employee = (Element) employees.item(i); String id = employee.getAttribute("id"); String firstName = employee.getElementsByTagName("firstName").item(0).getTextContent(); String lastName = employee.getElementsByTagName("lastName").item(0).getTextContent(); System.out.println("Employee " + id + ": " + firstName + " " + lastName); } } catch (Exception e) { e.printStackTrace(); } } }
2.做配置:
<?xml version="1.0" encoding="UTF-8"?> <database> <server>localhost</server> <port>3306</port> <dbname>mydb</dbname> <username>user</username> <password>password</password> </database>
标准的XML格式:
XML标准指的是XML文档的结构和语法规范。XML标准由W3C制定和管理,主要由三个部分组成:XML、XML命名空间和XML模式。其中,XML指的是可扩展标记语言,是一种用于传输和存储数据的文本格式。
<?xml version="1.0" encoding="UTF-8"?> <root> <employee> <id>小狗子</id> <firstName>John</firstName> <lastName>Doe</lastName> <email>john.doe@example.com</email> <phone>123-456-7890</phone> </employee> <employee> <id>小流氓</id> <firstName>Jane</firstName> <lastName>Smith</lastName> <email>jane.smith@example.com</email> <phone>123-456-7890</phone> </employee> </root>
二.元素定义:
XML元素,也称为XML标签,是XML文档的基本组成单元,是用于存储、传输和处理数据的标记符号。每个XML元素由开始标记、结束标记和中间的数据组成。开始标记和结束标记都是用一对尖括号"<" 和 “>” 包围的字符序列,中间的数据是元素的内容。
以下是XML元素的定义格式:
<element>content</element>
在这个格式中,<element>是元素的开始标记,</element>是结束标记,content是元素的内容。XML元素也可以没有内容,例如:
<empty-element/>
在这个例子中,使用斜杠和尖括号表示该元素没有内容。
XML元素可以具有属性,这些属性用于存储元素的附加信息。属性是元素的一个名称或值对,位于开始标记内。例如:
<book id="101"> <title>The Great Gatsby</title> <author>F. Scott Fitzgerald</author> <year>1925</year> </book>
在这个例子中,<book>元素具有一个id属性,该属性储存了该元素的唯一标识符。属性值须用引号(单引号或双引号)包围。
XML元素的命名遵循某些规则,包括:
名称必须以字母或下划线开头;
名称不能以数字或标点开头;
名称只能包含字母、数字、下划线、短横线、点、冒号和非ASCII字符;
名称必须在整个文档中唯一。
在XML加入DTD声明
在XML中加入DTD声明
要在XML中加入DTD声明,可以在XML文件的开头添加以下行:
<!DOCTYPE 根元素名 SYSTEM "DTD文件路径">
其中,<!DOCTYPE>是DTD声明的关键字,根元素名是XML文件中根元素的名称,DTD文件路径是DTD文件的路径。举例来说,假设XML文件的根元素为myroot,DTD文件名为mydtd.dtd,则在XML文件的开头应添加以下行:
<!DOCTYPE myroot SYSTEM "mydtd.dtd">
元素分类:
空元素:
DTD中的空元素是一种没有内容的元素。它们通常用于声明只有一个标记的元素。
DTD中可以使用“EMPTY”或“ANY”关键字来表示空元素。其中,"EMPTY"表示该元素没有子元素且没有内容,而"ANY"表示该元素允许包含任何内容。
例如,以下是定义一个空元素 “image” 的DTD:
<!ELEMENT image EMPTY> <!ATTLIST image src CDATA #REQUIRED alt CDATA #IMPLIED width CDATA #IMPLIED height CDATA #IMPLIED >
文本元素:
DTD中的文本元素用于定义包含纯文本信息的元素,这些元素不能包含其他元素或标记,只能包含文本内容。
在DTD中可以使用“ (#PCDATA)”关键字表示文本元素。其中,“#PCDATA”代表解析器可以解析的“解析器数据”,即文本数据。
例如,以下是一个定义为文本元素的DTD示例:
<!ELEMENT message (#PCDATA)>
上述示例中,定义了一个名为 “message” 的元素,并使用 “(#PCDATA)”关键字来表示该元素只能包含纯文本内容,不能包含其他元素。
在XML文档中,可以使用文本元素来表示短语、说明、注释等纯文本内容。例如:
<message>Hello World!</message>
混合元素:
DTD中可以使用混合模式来定义元素内容,即 XML 元素可以同时包含文本和其他元素。
在混合模式中,可以使用“(#PCDATA)”表示可以包含文本,同时也可以使用其他元素的名称表示可以包含其他元素。在语法中,可以使用“ | ”或“,”分隔符表示可以包含多种内容。
例如,以下示例中定义了一个混合元素:
<!ELEMENT person (#PCDATA | name | age | gender)*>
上述示例中,“person” 元素的内容可以包含任何次序的文本或者 “name”、“age” 和 “gender” 元素。其中“ * ”表示可以出现 0 次或多次。
在 XML 文档中,混合元素可以像下面这样使用:
<person> My name is <name>John Doe</name>. I am <age>30</age> years old and my gender is <gender>male</gender>. </person>
上述示例中, “person” 元素的内容中混合了文本和三个其他元素。
元素的额限制:
例如,以下是一个限制出现次数的 DTD 示例:
<!ELEMENT message (greeting, text, signature?)>
上述示例中,“ signature?” 代表该元素为可选元素,出现 0 次 或 1 次。
上述示例中,“ () ” 中的元素依次排列,表示在 XML 文档中, “ greeting ” 节点必须先出现, “ text ” 节点出现在 “ greeting ” 后面,最后可选地出现 “ signature ” 节点。
通过以上方式,我们可以在 DTD 中灵活地定义元素的出现次数和顺序。这有助于确保 XML 文档符合指定的格式和结构。
在元素类型定义中,可以使用括号和逗号来限制元素的出现顺序。例如,以下是一个限制元素出现顺序的 DTD 示例:
<!ELEMENT message (greeting, text, signature?)>
- 在 DTD 中,可以使用以下方式来限制元素的出现次数和顺序:
- 限制元素出现次数:
- 在元素类型定义中,可以使用以下符号来限制元素出现次数:
- “?”:表示该元素出现 0 或 1 次。
- “*”:表示该元素出现 0 次或任意多次。
- “+”:表示该元素必须出现至少一次。
- 限制元素出现顺序:
三.属性定义:
在XML DTD中,可以使用<!ATTLIST>声明来定义元素的属性,<!ATTLIST>用于定义一个元素可用的属性及其值域和默认值等信息,语法格式如下:
<!ATTLIST 元素名 属性名1 属性类型1 属性默认值1 属性名2 属性类型2 属性默认值2 ... 属性名n 属性类型n 属性默认值n>
其中,元素名为要定义属性的元素名称,属性名、属性类型和属性默认值分别为属性的名称、类型和默认值。每个属性的定义需占用一行,各个属性定义之间必须以空格或制表符分隔。
以下是一个例子:
<!ELEMENT book (title, author)> <!ATTLIST book id CDATA #REQUIRED lang CDATA "en" edition CDATA "1">
语法:
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> <!ATTLIST note date CDATA #IMPLIED> ]>
属性类型Type
下面是几种常见的属性类型:
- CDATA:表示普通的字符串,即标准文本;
- NMTOKEN:表示不含空格或其他分隔符的标记名称,如元素和属性的名称;
- ID:表示一个唯一的标识符,不能重复,并且只能出现一次;
- IDREF:表示一个对文档中某个元素的唯一引用,只能引用元素ID;
- IDREFS:表示一个对文档中多个元素的唯一引用,可以引用多个元素ID,用空格分隔;
- ENTITY:表示一个外部实体的名称,与 ENTITY 声明一起使用;
- ENTITIES:表示多个外部实体的名称,可以用空格分隔;
- NOTATION:表示专门用于标识一种特定类型的属性值,与 PUBLIC 和 SYSTEM 声明一起使用。
属性类型 Type 需要在 DTD 中进行声明。例如,要声明 ID 和 CDATA 类型的属性:
1. <!ELEMENT person (name, email)> 2. <!ATTLIST person 3. id ID #REQUIRED 4. email CDATA #REQUIRED>
这个 DTD 将元素 person 定义为必须拥有 ID 和 email 属性,并且 ID 属性值必须是唯一的。
属性描述:
XMLDTD 指的是 XML Document Type Definition,它是一种用于定义 XML 文档结构的语法规则。在 XMLDTD 中,可以使用属性描述来定义 XML 元素的属性。属性描述定义了属性的名称、数据类型、默认值和可选项,以及其他限制和规则。
属性描述可以包含以下内容:
- 属性名称:使用属性名称来定义属性。
- 属性数据类型:使用数据类型来限制属性的取值范围。
- 属性默认值:使用默认值来指定未提供属性值时的默认值。
- 属性可选项:使用可选项来定义属性是否必填。
- 属性其他限制和规则:使用其他限制和规则来定义属性的其他限制和规则,比如允许的最小值、最大值等。
例如,以下是一个示例 XMLDTD 的属性描述:
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> <!ATTLIST note date CDATA #IMPLIED priority (high|normal|low) "normal" > ]>
在上面的示例中,note 元素定义了两个属性:date 和 priority。其中 date 属性的数据类型是 CDATA,表示可以包含任意字符数据;priority 属性的数据类型是一个枚举类型,取值必须是 high、normal 或 low 之一。同时,priority 属性还指定了一个默认值 normal。