XML指南——XML 属性
XML属性是XML元素的重要组成部分,用于为元素提供额外的、结构化的信息。和HTML中的属性类似,XML属性以名称-值对的形式附着在元素上,能够帮助开发者更清晰地描述元素的特性,是XML数据建模中常用的工具。
XML属性的基本语法
XML属性的书写需要遵循严格的语法规则,核心要求如下:
- 属性必须写在元素的开始标签中,不能单独存在
- 每个属性由属性名和属性值两部分组成,中间用等号连接
- 属性值必须使用单引号或双引号包裹,且同一元素内属性名不能重复
- 属性名区分大小写,命名规则和XML元素名一致,不能以数字或 punctuation 字符开头
下面是一个包含属性的XML元素示例:
<?xml version="1.0" encoding="UTF-8"?> <book category="计算机" lang="zh"> <title>XML入门教程</title> <author>张三</author> <price currency="CNY">59.90</price> </book>
在这个示例中,<book>元素拥有category和lang两个属性,分别说明书籍的分类和语言;<price>元素拥有currency属性,说明价格对应的货币类型。这些属性让元素的信息更加丰富,无需额外增加子元素就能传递关键特性。
XML属性和子元素的区别
在XML设计中,很多信息既可以用属性表示,也可以用子元素表示,二者的选择需要结合使用场景:
| 对比维度 | XML属性 | 子元素 |
|---|---|---|
| 可扩展性 | 同一个元素中属性名不能重复,扩展时需要修改结构 | 可以无限添加同名的子元素,扩展更灵活 |
| 复杂信息支持 | 只能存储简单的文本值,不能包含嵌套结构 | 可以包含文本、嵌套子元素,支持复杂数据结构 |
| 可读性 | 适合存储简短的、描述元素特性的元数据 | 适合存储需要被解析、有层级关系的业务数据 |
比如上面的书籍价格例子中,如果只需要说明货币类型,用currency属性就很合适;如果需要同时记录货币的汇率、发行机构等更多信息,就更适合把货币信息作为<price>的子元素:
<price>
<value>59.90</value>
<currency>
<code>CNY</code>
<name>人民币</name>
<symbol>¥</symbol>
</currency>
</price>XML属性的使用注意事项
在实际使用XML属性时,还需要注意以下约束:
- 属性值不能包含直接的小于号(<)、大于号(>)和与号(&),如果需要使用这些字符,必须用对应的实体引用代替:< 对应 <,> 对应 >,& 对应 &
- 属性不能包含多个值,如果需要存储多个同类型的值,优先使用子元素或者将值用分隔符拼接后存储,同时做好解析约定
- 不要在属性中存储需要频繁修改的内容,因为属性通常作为元素的固定特性存在,频繁修改的内容更适合放在子元素中
下面是一个属性值包含特殊字符的错误和正确写法对比:
<!-- 错误写法,属性值包含未转义的&字符 --> <user info="姓名&年龄">李四</user> <!-- 正确写法,使用实体引用代替特殊字符 --> <user info="姓名&年龄">李四</user>
XML属性的解析示例
在编程中解析XML时,获取元素属性的逻辑也很简单,以下是Python使用xml.etree.ElementTree模块解析XML属性的示例:
import xml.etree.ElementTree as ET
# 待解析的XML内容
xml_content = """<?xml version="1.0" encoding="UTF-8"?>
<book category="计算机" lang="zh">
<title>XML入门教程</title>
<author>张三</author>
<price currency="CNY">59.90</price>
</book>"""
# 解析XML
root = ET.fromstring(xml_content)
# 获取book元素的属性
book_category = root.get("category")
book_lang = root.get("lang")
print(f"书籍分类:{book_category},语言:{book_lang}")
# 获取price元素的属性
price_elem = root.find("price")
price_currency = price_elem.get("currency")
price_value = price_elem.text
print(f"价格:{price_value} {price_currency}")运行上述代码后,会输出对应的属性值,这是XML属性在实际开发中常见的使用场景,通过属性可以快速获取元素的附加信息,减少不必要的层级解析。
XML属性XML语法XML属性与子元素XML解析XML数据建模 本作品最后修改时间:2026-05-22 23:41:43