下面给你整理一份系统、详细、易懂的《XML 属性学习教程》,帮助你全面掌握 XML 属性的概念、语法、类型、用法与注意事项。
📘 一、什么是 XML 属性?
- 定义:属性是 元素的附加信息,存储在元素标签内,用于描述元素的特征、状态或额外数据。
- 特点:
- 属性存在于开始标签中
- 不能有子元素
- 属性值必须用引号(单引号或双引号)
- 一个元素可以有多个属性
📘 二、XML 属性的基本语法
<元素名 属性1="值1" 属性2='值2'>内容</元素名>
示例:
<book id="b001" category="Science">
<title>宇宙简史</title>
</book>
id和category是 book 元素的属性- 属性值必须用引号
- 属性不能有子元素,只能是简单文本
📘 三、XML 属性的类型
XML 本身属性类型比较简单,主要在 DTD 或 XSD 中指定属性类型。
1️⃣ DTD 中的属性类型
| 类型 | 说明 |
|---|---|
| CDATA | 任意文本(最常用) |
| ID | 唯一标识符,全局唯一 |
| IDREF | 引用某个 ID |
| IDREFS | 多个 ID,用空格分隔 |
| NMTOKEN | 单个名字字符(字母、数字、下划线、连字符) |
| NMTOKENS | 多个名字字符,用空格分隔 |
| ENUMERATION | 枚举类型(限定取值) |
示例 DTD:
<!ELEMENT book (title, author)>
<!ATTLIST book
id ID #REQUIRED
category (Science|History|Novel) "Novel"
>
id必须出现且唯一category取值只能是 Science、History 或 Novel,默认值是 Novel
2️⃣ XSD 中的属性类型(更强大)
XSD 可以定义:
- 字符串、整型、日期、布尔等多种数据类型
- 枚举、正则表达式限制
- 必填 / 可选属性
XSD 示例:
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="category" type="xs:string" use="optional" default="Novel"/>
📘 四、XML 属性使用规则
- 唯一性:一个元素中同名属性只能出现一次
- 引号:属性值必须使用单引号
'或双引号" - 合法字符:
- 不允许出现
<、>、&等特殊字符(需转义或用 CDATA)
- 不允许出现
- 命名规则:
- 属性名遵循 XML 名称规则(字母开头,可包含字母、数字、下划线、连字符)
- 默认值:可在 DTD/XSD 中指定
📘 五、XML 属性与元素内容的对比
| 特性 | 元素 | 属性 |
|---|---|---|
| 是否可以有子元素 | 可以 | 不可以 |
| 是否可以有多值 | 多值需嵌套元素 | 一次只能一个值 |
| 适用场景 | 内容复杂,结构化数据 | 简单、描述性、标识性信息 |
| 可空 | 可以为空元素 | 必须有默认值或可选 |
📘 六、XML 属性的访问与操作
1️⃣ Java DOM
Element book = (Element) doc.getElementsByTagName("book").item(0);
String id = book.getAttribute("id");
String category = book.getAttribute("category");
book.setAttribute("category", "History"); // 修改属性
2️⃣ Python lxml
book = tree.find('book')
id_val = book.get('id')
category_val = book.get('category')
book.set('category', 'History')
3️⃣ JavaScript(浏览器)
let book = document.querySelector('book');
let id = book.getAttribute('id');
book.setAttribute('category', 'History');
📘 七、XML 属性最佳实践
- 尽量用元素表达复杂内容
- 属性适合标识、标记、状态、简单信息
- 内容复杂的数据用子元素
- 命名规范
- 使用有意义、简短、统一的命名
- 统一编码
- 属性值中如包含中文或特殊字符,统一使用 UTF-8 并注意转义
- 避免大量属性
- 过多属性会影响可读性和维护性
- 配合 DTD/XSD 校验
- 保证属性的合法性、类型、安全性
📘 八、综合示例
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="b001" category="Science">
<title>宇宙简史</title>
<author>Stephen Hawking</author>
<price currency="USD">68</price>
</book>
</bookstore>
id、category是 book 元素属性currency是 price 元素属性- 其他信息作为子元素表达更复杂的数据
📘 九、总结
- XML 属性用于描述元素的额外信息
- 属性值必须用引号、且同名属性不能重复
- 属性适合存放简单信息,元素适合存放复杂数据
- DTD/XSD 可对属性类型、是否必填、默认值、枚举值进行约束
- 操作属性的方法在 Java、Python、JS 中都很类似