Python 3.x xml.etree.ElementTree>&燃气轮机;Python>&燃气轮机;如何访问子元素并进行断言
我正在使用PyTest验证XMLAPI响应。 从api请求获取以下响应(response.content)Python 3.x xml.etree.ElementTree>&燃气轮机;Python>&燃气轮机;如何访问子元素并进行断言,python-3.x,xml,pytest,elementtree,Python 3.x,Xml,Pytest,Elementtree,我正在使用PyTest验证XMLAPI响应。 从api请求获取以下响应(response.content) b'<?xml version="1.0" encoding="UTF-8"?> <Result0> <Result1> <Result3> <Id>2</Id> <ItemId>https://purchanse.com/62/E00036415</ItemI
b'<?xml version="1.0" encoding="UTF-8"?>
<Result0>
<Result1>
<Result3>
<Id>2</Id>
<ItemId>https://purchanse.com/62/E00036415</ItemId>
<Place>kpi:62_CS415-TEN-1080p25-ABC</Place>
<Marks>12</Marks>
<SubId>9, 8</SubId>
<Description>https://purchanse.com/62/E00036416</Description>
</Result3>
<Result4>
<Id>2</Id>
<ItemId>https://purchanse.com/64/E00036417</ItemId>
<Place>kpi:63_CS415-TEN-1080p25-XYZ</Place>
<Marks>12</Marks>
<SubId>9</SubId>
<Description>https://purchanse.com/64/E00036416</Description>
</Result4>
</Result1>
</Result0>'
如何对此解析XML?有人能帮忙吗你有多个标签,上面有提到的名字,所以相应的 应分别对每个父项执行一组检查 这些标签 要执行此操作,请尝试以下代码,可能不带打印语句:
for it in element.findall('Result1/*'):
print(it.tag)
mrks = it.findtext('Marks')
id = it.findtext('Id')
itmId = it.findtext('ItemId')
print(mrks, id, itmId)
assert mrks == '12'
assert id == '2'
assert itmId != 'https://purchanse.com/62/E00036416'
使用XPath查询,例如
assert元素。find('.//Result1/Result3/Marks')。text='12'
等。您从Result0
开始,因此所有查询都是相对于Result0
节点进行的。@非常感谢。若在任何一个节点中都不满足条件,那个么是否有任何方法可以在循环中检查并将assert标记为“fail”。比如,我想在所有子节点中检查SubId==9。因此它应该会失败,因为在第一个子节点中,我们有9,8个元素。findall('.//Result1//SubId')
将为您提供位于Result1
子树中的所有SubId
元素的列表。从那里,您可以在循环中断言或执行smth,如assert all(el.text='9'表示el-in-element.findall('.//Result1//SubId'))
谢谢。其实这就是我要找的。但不知何故,我无法打印这些声明(我想看到)。除此之外,还有任何方法可以使用contains或or检查列表中的itemIds。比如“断言它的存在!”purchanse.com/62/E00036416或purchanse.com/62/E00036417或purchanse.com/62/E00036416``断言itmId包含,首先在帖子中包含的相同输入数据示例上尝试我的代码。如果我的代码打印出了所需的数据,那么您就可以证明它是正确的。如果此代码未在其他输入数据上打印预期结果,则此(其他)数据可能在某些方面不同,您应该识别此差异。至于其他条件:我的代码首先读取每个元素的内容。然后,将内容包含在各自的变量中,您可以检查您想要的任何内容,包括或特定条件。
Marks == 12
Id == 2
ItemId != "https://purchanse.com/62/E00036416"
for it in element.findall('Result1/*'):
print(it.tag)
mrks = it.findtext('Marks')
id = it.findtext('Id')
itmId = it.findtext('ItemId')
print(mrks, id, itmId)
assert mrks == '12'
assert id == '2'
assert itmId != 'https://purchanse.com/62/E00036416'