Python解析XML获取测试节点与属性详解

小鹿同学
小鹿同学
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何利用Python的xml.dom.minidom模块解析XML文件,实现测试脚本与数据的分离。通过具体代码示例,演示如何获取XML节点列表、访问节点属性及提取节点值,适用于自动化测试中频繁变动或大量数据的参数化管理场景。

引言:利用XML获取测试数据的核心目的在于实现数据的参数化。将测试脚本与测试数据分离,能够显著提升脚本的可读性与可维护性,同时也便于问题的排查与定位。

XML(可扩展标记语言)是一种用于定义电子文件结构的标记语言,旨在赋予电子文件清晰的结构化特征。

在自动化测试领域,XML主要应用于以下场景:

1. 测试数据频繁变动的情况;

2. 数据量庞大,难以直接嵌入脚本中;

3. 同一组数据需要在多个测试环节中使用;

4. 相同的测试用例需要适配不同的测试数据;

5. 针对功能不稳定、后续改动较多或容易出错的功能模块。

XML的主要特征包括:

• 具备自我描述性,XML本身不执行任何操作;

• 包含声明部分,格式为 <?xml version="1.0" encoding="UTF-8"?>;

• 标签必须成对出现,即有开始标签必有结束标签,例如 <data></data>;

• 支持属性值定义,例如 <data type='demo'></data>;

• 用于数据传输,例如 <data type='demo'> message </data>;

• 支持嵌套子标签,例如 <data type='demo'><text>message</text></data>。

以下是Python中获取XML文件内容的方法集合:

首先,引入处理XML文件的模块。

from xml.dom.minidom import parse

接着,打开XML文档。

DOMTree = xml.dom.minidom.parse(data_path)

根据XML文档内容,获取文档元素的对象。

data = DOMTree.documentElement

获取指定的节点列表。

nodelist = data.getElementsByTagName(大类名称)

获取第一个节点的子节点列表。

childlist = nodelist[0].childNodes

获取XML节点的属性值。

node.getAttribute(AttributeName)

获取XML节点的对象集合。

node.getElementsByTagName(TagName)

返回子节点列表。

node.childNodes

获取XML节点的具体值。

node.childNodes[index].nodeValue

访问第一个节点。

node.firstChild ,等价于pagexml.childNodes[0]

访问元素属性,具体示例如下:

Node.attributes["id"] 
a.name #就是上面的 "id" 
a.value #属性的值

以下是具体的Demo内容:

方法调用示例。

#方法调用
text = get_data_vaule('account','type','createText','text')
print text
#结果
test data

对应的XML文件结构。

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <account type='createText'>
    <text>test data</text>
  </account>
  <account type='email'>
    <username>11111@qq.com</username>
    <password>11111111</password>
  </account>
</data>

上述方法对应的数据获取格式说明:style 代表XML中的大类名称;typename 代表细分属性名;typevalue 代表细分属性的具体值;valuename 代表XML文件中需要获取值的标签名(tag)。

若需从上述XML文件中获取特定数据,

例如获取“test data”的值,参数设置为 style = data,typename = type,typevalue = createText,valuename = text;若需获取“11111@qq.com”的值,则参数设置为 style = data,typename = type,typevalue = email,valuename = username。

相关方法代码文件。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import unittest
import os
import time
from xml.dom.minidom import parse
import xml.dom.minidom
#获取xml文件地址
path = os.path.abspath('.') 
data_path = os.path.join(path,'features/data/data.xml') #获取xml文件地址
DOMTree = xml.dom.minidom.parse(data_path) 
data = DOMTree.documentElement
def get_attrvalue(node, attrname):
   return node.getAttribute(attrname)
# style = xml中的大类 ; typename = 细分属性; typevalue = 细分属性的值; valuename = xml文件,需要获取的值的tag;
def get_data_vaule(style, typename, typevalue, valuename):
  nodelist = data.getElementsByTagName(style)
  for node in nodelist: 
    if typevalue == node.getAttribute(typename):
      node_name = node.getElementsByTagName(valuename)
      value = node_name[0].childNodes[0].nodeValue
      print value
      return value
  return 

以上关于Python通过XML获取测试节点和属性的实例分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表