XML文档中除了标签的文本内容,标签上携带的属性也是重要的数据载体,比如<user id="1001" name="张三"/>中的id和name就是user标签的属性,实际开发中经常需要读取这些属性值完成业务逻辑。

XML属性的基本规则
XML属性的书写格式为属性名="属性值",属性值必须用英文双引号或者英文单引号包裹,同一个标签上的多个属性之间用空格分隔,属性名不能重复。属性通常用来描述标签的附加特征,和标签的文本内容属于不同的数据维度。
使用DOM解析读取XML属性
DOM解析是把整个XML文档加载到内存中形成树形结构,通过节点操作获取属性,下面是JavaScript中使用DOM解析读取属性的示例,示例XML内容如下:
<?xml version="1.0" encoding="UTF-8"?> <users> <user id="1001" name="张三" age="25"/> <user id="1002" name="李四" age="28"/> </users>
读取所有user标签的id和name属性的代码如下:
// 假设xmlDoc是已经加载完成的XML文档对象
// 获取所有user标签节点
var userNodes = xmlDoc.getElementsByTagName("user");
// 遍历节点读取属性
for (var i = 0; i < userNodes.length; i++) {
var userId = userNodes[i].getAttribute("id");
var userName = userNodes[i].getAttribute("name");
var userAge = userNodes[i].getAttribute("age");
console.log("用户ID:" + userId + ",姓名:" + userName + ",年龄:" + userAge);
}
这里使用getAttribute方法传入属性名即可获取对应的属性值,如果属性不存在会返回空字符串或者null,具体返回值取决于解析器的实现。
使用Python标准库读取XML属性
Python内置的xml.etree.ElementTree模块可以用来解析XML,读取属性的操作非常简洁,首先准备同样的XML内容:
<?xml version="1.0" encoding="UTF-8"?> <users> <user id="1001" name="张三" age="25"/> <user id="1002" name="李四" age="28"/> </users>
读取属性的代码示例如下:
import xml.etree.ElementTree as ET
# 解析XML字符串,也可以替换为ET.parse("文件路径")解析本地文件
xml_data = """<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1001" name="张三" age="25"/>
<user id="1002" name="李四" age="28"/>
</users>"""
root = ET.fromstring(xml_data)
# 遍历user标签读取属性
for user in root.findall("user"):
user_id = user.get("id")
user_name = user.get("name")
user_age = user.get("age")
print(f"用户ID:{user_id},姓名:{user_name},年龄:{user_age}")
这里使用标签对象的get方法获取属性,如果属性不存在会返回None,也可以给get方法传入第二个参数作为默认值,比如user.get("id", "0")表示如果id属性不存在就返回0。
读取属性的注意事项
- 属性值必须符合XML的编码规范,不能包含未转义的特殊字符比如<、&等,否则会导致解析失败。
- 不同解析器对属性值的处理可能存在细微差异,比如空属性的返回值,实际使用时可以先做测试。
- 如果XML文档结构复杂,读取属性前最好先判断标签是否存在,避免出现空指针错误。
XML属性的读取是XML解析的基础操作,掌握不同场景下的实现方法可以快速应对各类数据解析需求,实际开发中可以根据项目使用的技术栈选择合适的解析方式。