Python 无法从 XML 中的父标签获取子标签及其值
Python unable to get child tag and its value from parent tag in XML
在 Python 中,我正在使用 from xml.dom import minidom 模块。
此外,我有一个 xml,试图使用上面的模块解析它。
<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="4" failures="2">
<testsuite name="iOSUITests" tests="4" failures="2" time="9325.715">
<testcase classname="DR" name="test_1()" time="26.1042">
</testcase>
<testcase classname="DR" name="test_2()" time="31.5843">
</testcase>
<testcase classname="DR" name="test_3()" time="32.8958">
<failure message="failed - reason1">
</failure>
</testcase>
<testcase classname="GD" name="test_4()" time="48.18003">
<failure message="failed - reason2">
</failure>
</testcase>
</testsuite>
</testsuites>
我正在尝试获取每个测试用例的失败子标记,但无法为相应的测试用例获取它。因为我需要将测试用例状态更新为通过或失败及其消息。我试图执行下面的代码。
testcase = doc.getElementsByTagName("testcase")
for index, tc in enumerate(testcase):
xml_testcase_list.append({})
xml_testcase_list[index][classname] = tc.getAttribute(classname)
#print "tc.firstChild.items()", tc.childNodes.item
#print "tc.firstChild.items()", tc.firstChild.nodeValue
if 'failure' in tc.firstChild.nodeValue:
xml_testcase_list[index][failure] = []
failure = doc.getElementsByTagName("failure")[0]
#print "getNodeText(failure)", failure.childNodes
for each_index, each_failure in enumerate(failure):
xml_testcase_list[index][failure].append({})
xml_testcase_list[index][failure][each_index][message] = each_failure.getAttribute(message)
如何在我的 if 条件中获取失败标记?
要获取 testcase
元素的所有 failure
child 标签,如果存在,可以调用 tc.getElementsByTagName("failure")
。如果你在一个元素上使用那个方法,它只会检查 children。然后你可以检查返回的数组是否为空,如果不是,则获取第一个结果。
from xml.dom import minidom
with open('xml.xml') as f: # your file stored in xml.xml
doc = minidom.parse(f)
testcase = doc.getElementsByTagName("testcase")
xml_testcase_list = []
for index, tc in enumerate(testcase):
xml_testcase_list.append({})
xml_testcase_list[index]['classname'] = tc.getAttribute('classname')
failures = tc.getElementsByTagName('failure')
if failures:
xml_testcase_list[index][failure] = []
failure = failures[0]
for each_index, each_failure in enumerate(failure):
xml_testcase_list[index][failure].append({})
xml_testcase_list[index][failure][each_index][message] = each_failure.getAttribute(message)
else:
print 'no failures for', tc
我不得不说,您的示例不包含 failure
的任何 child 个元素,因此 for each_index, each_failure
将无法按预期工作。
挑战不是 if 条件,而是您引用标签的方式:
xml_testcase_list[index][classname] = tc.getAttribute(classname)
应该是
xml_testcase_list[index]['classname'] = tc.getAttribute('classname')
另请发送您的错误信息。
在 Python 中,我正在使用 from xml.dom import minidom 模块。 此外,我有一个 xml,试图使用上面的模块解析它。
<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="4" failures="2">
<testsuite name="iOSUITests" tests="4" failures="2" time="9325.715">
<testcase classname="DR" name="test_1()" time="26.1042">
</testcase>
<testcase classname="DR" name="test_2()" time="31.5843">
</testcase>
<testcase classname="DR" name="test_3()" time="32.8958">
<failure message="failed - reason1">
</failure>
</testcase>
<testcase classname="GD" name="test_4()" time="48.18003">
<failure message="failed - reason2">
</failure>
</testcase>
</testsuite>
</testsuites>
我正在尝试获取每个测试用例的失败子标记,但无法为相应的测试用例获取它。因为我需要将测试用例状态更新为通过或失败及其消息。我试图执行下面的代码。
testcase = doc.getElementsByTagName("testcase")
for index, tc in enumerate(testcase):
xml_testcase_list.append({})
xml_testcase_list[index][classname] = tc.getAttribute(classname)
#print "tc.firstChild.items()", tc.childNodes.item
#print "tc.firstChild.items()", tc.firstChild.nodeValue
if 'failure' in tc.firstChild.nodeValue:
xml_testcase_list[index][failure] = []
failure = doc.getElementsByTagName("failure")[0]
#print "getNodeText(failure)", failure.childNodes
for each_index, each_failure in enumerate(failure):
xml_testcase_list[index][failure].append({})
xml_testcase_list[index][failure][each_index][message] = each_failure.getAttribute(message)
如何在我的 if 条件中获取失败标记?
要获取 testcase
元素的所有 failure
child 标签,如果存在,可以调用 tc.getElementsByTagName("failure")
。如果你在一个元素上使用那个方法,它只会检查 children。然后你可以检查返回的数组是否为空,如果不是,则获取第一个结果。
from xml.dom import minidom
with open('xml.xml') as f: # your file stored in xml.xml
doc = minidom.parse(f)
testcase = doc.getElementsByTagName("testcase")
xml_testcase_list = []
for index, tc in enumerate(testcase):
xml_testcase_list.append({})
xml_testcase_list[index]['classname'] = tc.getAttribute('classname')
failures = tc.getElementsByTagName('failure')
if failures:
xml_testcase_list[index][failure] = []
failure = failures[0]
for each_index, each_failure in enumerate(failure):
xml_testcase_list[index][failure].append({})
xml_testcase_list[index][failure][each_index][message] = each_failure.getAttribute(message)
else:
print 'no failures for', tc
我不得不说,您的示例不包含 failure
的任何 child 个元素,因此 for each_index, each_failure
将无法按预期工作。
挑战不是 if 条件,而是您引用标签的方式:
xml_testcase_list[index][classname] = tc.getAttribute(classname)
应该是
xml_testcase_list[index]['classname'] = tc.getAttribute('classname')
另请发送您的错误信息。