Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x xml.etree.ElementTree>&燃气轮机;Python>&燃气轮机;如何访问子元素并进行断言_Python 3.x_Xml_Pytest_Elementtree - Fatal编程技术网

Python 3.x xml.etree.ElementTree>&燃气轮机;Python>&燃气轮机;如何访问子元素并进行断言

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

我正在使用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</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'