下面给你整理一份系统、详细、易懂的《XML 属性学习教程》,帮助你全面掌握 XML 属性的概念、语法、类型、用法与注意事项。


📘 一、什么是 XML 属性?

  • 定义:属性是 元素的附加信息,存储在元素标签内,用于描述元素的特征、状态或额外数据。
  • 特点
    1. 属性存在于开始标签中
    2. 不能有子元素
    3. 属性值必须用引号(单引号或双引号)
    4. 一个元素可以有多个属性

📘 二、XML 属性的基本语法

<元素名 属性1="值1" 属性2='值2'>内容</元素名>

示例:

<book id="b001" category="Science">
    <title>宇宙简史</title>
</book>

  • idcategory 是 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 属性使用规则

  1. 唯一性:一个元素中同名属性只能出现一次
  2. 引号:属性值必须使用单引号 ' 或双引号 "
  3. 合法字符
    • 不允许出现 <>& 等特殊字符(需转义或用 CDATA)
  4. 命名规则
    • 属性名遵循 XML 名称规则(字母开头,可包含字母、数字、下划线、连字符)
  5. 默认值:可在 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 属性最佳实践

  1. 尽量用元素表达复杂内容
    • 属性适合标识、标记、状态、简单信息
    • 内容复杂的数据用子元素
  2. 命名规范
    • 使用有意义、简短、统一的命名
  3. 统一编码
    • 属性值中如包含中文或特殊字符,统一使用 UTF-8 并注意转义
  4. 避免大量属性
    • 过多属性会影响可读性和维护性
  5. 配合 DTD/XSD 校验
    • 保证属性的合法性、类型、安全性

📘 八、综合示例

&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;bookstore>
    &lt;book id="b001" category="Science">
        &lt;title>宇宙简史&lt;/title>
        &lt;author>Stephen Hawking&lt;/author>
        &lt;price currency="USD">68&lt;/price>
    &lt;/book>
&lt;/bookstore>

  • idcategory 是 book 元素属性
  • currency 是 price 元素属性
  • 其他信息作为子元素表达更复杂的数据

📘 九、总结

  1. XML 属性用于描述元素的额外信息
  2. 属性值必须用引号、且同名属性不能重复
  3. 属性适合存放简单信息,元素适合存放复杂数据
  4. DTD/XSD 可对属性类型、是否必填、默认值、枚举值进行约束
  5. 操作属性的方法在 Java、Python、JS 中都很类似