解析复杂的Xml Python 3.4

时间:2016-07-21 15:48:30

标签: python xml

我有以下xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Suite>
<TestCase>
  <TestCaseID>001</TestCaseID>
  <TestCaseDescription>Hello</TestCaseDescription>
  <TestSetup>
    <Action>
      <ActionCommand>gfdg</ActionCommand>
      <TimeOut>dfgd</TimeOut>
      <BamSymbol>gff</BamSymbol>
      <Side>vfbgc</Side>
      <PrimeBroker>fgfd</PrimeBroker>
      <Size>fbcgc</Size>
      <PMCode>fdgd</PMCode>
      <Strategy>fdgf</Strategy>
      <SubStrategy>fgf</SubStrategy>
      <ActionLogEndPoint>fdgf</ActionLogEndPoint>
      <IsActionResultLogged>fdgf</IsActionResultLogged>
      <ValidationStep>
        <IsValidated>fgdf</IsValidated>
        <ValidationFormat>dfgf</ValidationFormat>
        <ResponseEndpoint>gdf</ResponseEndpoint>
        <ResponseParameterName>fdgfdg</ResponseParameterName>
        <ResponseParameterValue>gff</ResponseParameterValue>
        <ExpectedValue>fdgf</ExpectedValue>
        <IsValidationResultLogged>gdfgf</IsValidationResultLogged>
        <ValidationLogEndpoint>fdgf</ValidationLogEndpoint>
      </ValidationStep>
    </Action>
    <Action>
      <ActionCommand>New Order</ActionCommand>
      <TimeOut>fdgf</TimeOut>
      <BamSymbol>fdg</BamSymbol>
      <Side>C(COVER)</Side>
      <PrimeBroker>CSPB</PrimeBroker>
      <Size>fdgd</Size>
      <PMCode>GREE</PMCode>
      <Strategy>Generalist</Strategy>
      <SubStrategy>USLC</SubStrategy>
      <ActionLogEndPoint>gfbhgf</ActionLogEndPoint>
      <IsActionResultLogged>fdgf</IsActionResultLogged>
      <ValidationStep>
        <IsValidated>fdgd</IsValidated>
        <ValidationFormat>dfgfd</ValidationFormat>
        <ResponseEndpoint>dfgf</ResponseEndpoint>
        <ResponseParameterName>fdgfd</ResponseParameterName>
        <ResponseParameterValue>dfgf</ResponseParameterValue>
        <ExpectedValue>fdg</ExpectedValue>
        <IsValidationResultLogged>fdgdf</IsValidationResultLogged>
        <ValidationLogEndpoint>fdgfd</ValidationLogEndpoint>
      </ValidationStep>
    </Action>
    </TestCase>
</Suite>

基于ActionCommand,我得到一个块,问题是无法获得子父标记(ValidationStep)及其所有子标记。有人可以帮忙吗?

我的代码:

for testSetup4 in root.findall(".TestCase/TestSetup/Action"):
     if testSetup4.find('ActionCommand').text == "gfdg":
         for c1 in testSetup4:
            t2.append(c1.tag)
            v2.append(c1.text)

         for k,v in zip(t2, v2):
            test_case[k] = v

我无法获得ValidationStep(子父级)及其相应的标签。

1 个答案:

答案 0 :(得分:0)

只需添加另一个循环即可遍历<ValidationStep>节点及其子节点。此外,您不需要另外两个列表,因为您可以在解析循环期间更新字典:

import xml.etree.ElementTree as et

dom = et.parse('Input.xml')
root = dom.getroot()

test_case = {}
for testSetup4 in root.findall(".TestCase/TestSetup/Action"):
     if testSetup4.find('ActionCommand').text == "gfdg":
        for c1 in testSetup4:
            test_case[c1.tag]= c1.text
        for vd in testSetup4.findall("./ValidationStep/*"):
            test_case[vd.tag]= vd.text

或者,使用双斜杠运算符搜索所有子项,包括<Action>元素的孙子:

for testSetup4 in root.findall(".TestCase/TestSetup/Action"):
     if testSetup4.find('ActionCommand').text == "gfdg":
         for c1 in testSetup4.findall(".//*"):
            test_case[c1.tag]= c1.text