繁体   English   中英

解析复杂的Xml Python 3.4

[英]Parsing complex Xml Python 3.4

我有以下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(子父级)及其对应的标签。

只需添加另一个循环即可遍历<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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM