相同结构的示例 XML 与完整 XML 的解析不同

Sample XML of same structure parses differently to Full XML

我之前发布了一个 ,其中包含缩写示例 XML 以供测试,我编辑了 XML 的重复内容以允许发布。

我发布的 XML 插页是

<meeting id="42736" barriertrial="0" venue="Rosehill Gardens" date="2016-03-19T00:00:00" gearchanges="-1" stewardsreport="-1" gearlist="-1" racebook="0" postracestewards="0" meetingtype="TAB" rail="Timing - Electronic : Rail - +2m" weather="Fine      " trackcondition="Good" nomsdeadline="2016-03-14T11:00:00" weightsdeadline="2016-03-15T16:00:00" acceptdeadline="2016-03-16T09:00:00" jockeydeadline="2016-03-16T12:00:00">
  <club abbrevname="Australian Turf Club" code="56398" associationclass="1" website="http://" />
  <race id="213262" number="1" nomnumber="7" division="0" name="NATHAN'S FAMOUS EPONA STAKES" mediumname="EPONA" shortname="EPONA STAKES" stage="Results" distance="1900" minweight="0" raisedweight="0" class="~         " age="3U        " grade="0" weightcondition="SWP       " trophy="1000" owner="1000" trainer="0" jockey="0" strapper="0" totalprize="150000" first="90000" second="30000" third="15000" fourth="7500" fifth="3000" time="2016-03-19T12:40:00" bonustype="          " nomsfee="0" acceptfee="0" trackcondition="Good      " timingmethod="Electronic" fastesttime="1-56.83   " sectionaltime="600/35.3  " formavailable="0" racebookprize="Of 0000 and trophies of 00. First 000 and trophies of 00 to owner, second 000, third 000, fourth 00, fifth 00, sixth 00, seventh 00, eighth 00">
    <condition line="1">Of 0000 and trophies of 00. First 000 and trophies of 00 to owner, second 000, third 000, fourth 00, fifth 00, sixth 00, seventh 00, eighth 00</condition>
    <condition line="3">No class restriction, Set Weights plus Penalties, For Three-Years-Old and Upwards, Fillies and Mares, (Group 3)</condition>
    <condition line="5">No Allowances for apprentices. Field Limit: 14 + 4 EM</condition>
    <nomination number="4" saddlecloth="4" horse="Vergara" id="171115" idnumber="" regnumber="" blinkers="1" trainernumber="38701" trainersurname="Cummings" trainerfirstname="Anthony" trainertrack="Randwick" rsbtrainername="Anthony Cummings" jockeynumber="86876" jockeysurname="McDonald" jockeyfirstname="James" barrier="7" weight="55" rating="93" description="B M 5 Snippetson x Graces Spirit (Flying Spur)" colours="Yellow, Red Epaulettes And Cap" owners="Anthony Cummings Thoroughbreds Pty Ltd Syndicate (Mgrs: A &amp; B Cummings) &amp; P C Racing Investments Syndicate (Mgr: P J Carroll)  " dob="2010-10-07T00:00:00" age="6" sex="M" career="30-7-4-2 5445.00" thistrack="6-1-1-0 500.00" thisdistance="0-0-0-0" goodtrack="17-3-2-2 1440.00" heavytrack="5-0-1-0 200.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="7-2-1-2 8340.00" secondup="7-1-1-0 200.00" mindistancewin="0" maxdistancewin="0" finished="1" weightvariation="0" variedweight="55" decimalmargin="0.00" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="2" saddlecloth="2" horse="Heavens Above" id="187674" idnumber="" regnumber="" blinkers="0" trainernumber="736" trainersurname="Martin" trainerfirstname="Tim" trainertrack="Rosehill" rsbtrainername="Tim Martin" jockeynumber="46930" jockeysurname="Angland" jockeyfirstname="Tye" barrier="6" weight="56" rating="88" description="B M 4 Street Cry(IRE) x Reggie(NZ) (Germano(GB))" colours="Yellow, Green Chevrons, Striped Cap" owners="President Bloodstock Pty Ltd (Mgr: R C Kemister)" dob="2011-08-12T00:00:00" age="5" sex="M" career="12-3-3-4 1520.00" thistrack="4-0-3-0 425.00" thisdistance="0-0-0-0" goodtrack="10-2-2-4 4845.00" heavytrack="0-0-0-0" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="2-0-1-1 710.00" secondup="2-0-2-0 675.00" mindistancewin="0" maxdistancewin="0" finished="2" weightvariation="0" variedweight="56" decimalmargin="0.20" penalty="0" pricestarting=".80F" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="6" saddlecloth="6" horse="Sweet Fire" id="184732" idnumber="" regnumber="" blinkers="0" trainernumber="681" trainersurname="Waller" trainerfirstname="Chris" trainertrack="Rosehill" rsbtrainername="Chris Waller" jockeynumber="51661" jockeysurname="Berry" jockeyfirstname="Tommy" barrier="5" weight="54" rating="85" description="BR M 4 Shamardal(USA) x Zarinia(IRE) (Intikhab(USA))" colours="Lilac And White Halves, Black Cap" owners="E J Lucas " dob="2011-09-25T00:00:00" age="5" sex="M" career="15-4-2-2 2750.00" thistrack="6-1-1-1 690.00" thisdistance="0-0-0-0" goodtrack="9-2-1-2 0395.00" heavytrack="1-0-0-0 0.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="3-0-0-0 00.00" secondup="3-1-1-0 200.00" mindistancewin="0" maxdistancewin="0" finished="3" weightvariation="0" variedweight="54" decimalmargin="0.50" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="7" saddlecloth="7" horse="Alegria" id="181928" idnumber="" regnumber="" blinkers="1" trainernumber="235" trainersurname="O'Shea" trainerfirstname="John" trainertrack="Agnes Banks/Hawkesbury" rsbtrainername="John O'Shea" jockeynumber="40275" jockeysurname="Clark" jockeyfirstname="Tim" barrier="1" weight="54" rating="81" description="B M 4 Medaglia D'oro(USA) x Pure Joy (Fusaichi Pegasus(USA))" colours="Royal Blue" owners="Godolphin" dob="2011-10-06T00:00:00" age="5" sex="M" career="12-3-1-5 6850.00" thistrack="4-1-0-2 600.00" thisdistance="0-0-0-0" goodtrack="5-1-1-3 575.00" heavytrack="4-2-0-1 4275.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="3-2-0-1 500.00" secondup="3-0-0-2 850.00" mindistancewin="0" maxdistancewin="0" finished="4" weightvariation="0" variedweight="54" decimalmargin="0.70" penalty="0" pricestarting=".50" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="11" saddlecloth="11" horse="Piamimi" id="158914" idnumber="" regnumber="" blinkers="0" trainernumber="773" trainersurname="Bennett" trainerfirstname="Greg" trainertrack="Scone" rsbtrainername="Greg Bennett" jockeynumber="48503" jockeysurname="Williams" jockeyfirstname="Craig" barrier="8" weight="54" rating="75" description="B OR BR M 6 Not a Single Doubt x Blurrta(NZ) (Bahhare(USA))" colours="Yellow, Dark Blue Diamonds, Striped Sleeves And Cap" owners="Dr M Wylie, K Kenny, J Canning, M Mcfayden, B Hyde &amp; P Toubji " dob="2009-08-23T00:00:00" age="7" sex="M" career="35-6-4-3 0275.00" thistrack="2-0-0-0 50.00" thisdistance="2-0-0-0 0.00" goodtrack="25-3-2-2 640.00" heavytrack="4-1-1-1 510.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="8-1-3-0 375.00" secondup="8-1-0-2 645.00" mindistancewin="0" maxdistancewin="0" finished="5" weightvariation="0" variedweight="54" decimalmargin="1.10" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="10" saddlecloth="10" horse="Blendwell" id="171408" idnumber="" regnumber="" blinkers="0" trainernumber="78024" trainersurname="Moody" trainerfirstname="Peter G" trainertrack="Warwick Farm" rsbtrainername="Peter G Moody" jockeynumber="85036" jockeysurname="Lane" jockeyfirstname="Damian" barrier="10" weight="54" rating="78" description="B M 5 Hard Spun(USA) x Bridie Belle(NZ) (Al Akbar)" colours="Tartan, Red Sash And Armbands" owners="D &amp; M Esplin Pty Ltd (Mgr: Mrs M E Esplin)" dob="2010-10-06T00:00:00" age="6" sex="M" career="17-4-3-4 7845.00" thistrack="0-0-0-0" thisdistance="0-0-0-0" goodtrack="8-0-1-2 135.00" heavytrack="2-2-0-0 000.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="6-0-0-3 35.00" secondup="3-1-0-1 050.00" mindistancewin="0" maxdistancewin="0" finished="6" weightvariation="0" variedweight="54" decimalmargin="1.20" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="3" saddlecloth="3" horse="Adorabeel (NZ)" id="166836" idnumber="" regnumber="" blinkers="0" trainernumber="1942" trainersurname="Pride" trainerfirstname="Joseph" trainertrack="Warwick Farm" rsbtrainername="Joseph Pride" jockeynumber="86280" jockeysurname="Clipperton" jockeyfirstname="Sam" barrier="9" weight="56" rating="86" description="BR OR BLK M 6 Savabeel x Plaza Doree(FR) (Saumarez(GB))" colours="Maroon, White Crossed Sashes, Yellow Armbands And Cap" owners="Mystery Downs (Mgr: F W Cook)" dob="2009-09-11T00:00:00" age="7" sex="M" career="34-6-5-4 1810.00" thistrack="11-1-2-1 5750.00" thisdistance="2-0-0-0 00.00" goodtrack="24-3-3-1 3910.00" heavytrack="0-0-0-0" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="7-1-1-1 650.00" secondup="7-0-2-1 050.00" mindistancewin="0" maxdistancewin="0" finished="7" weightvariation="0" variedweight="56" decimalmargin="2.30" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="8" saddlecloth="8" horse="Mary Lou" id="172933" idnumber="" regnumber="" blinkers="1" trainernumber="38701" trainersurname="Cummings" trainerfirstname="Anthony" trainertrack="Randwick" rsbtrainername="Anthony Cummings" jockeynumber="86596" jockeysurname="Collett" jockeyfirstname="Jason" barrier="11" weight="54" rating="80" description="B M 5 Fastnet Rock x Miss Alabama(NZ) (Woodman(USA))" colours="Red, Black Diagonal Stripes And Armbands, Quartered Cap" owners="E-Thoroughbred (Mgr: A W &amp; M G Bott) &amp; Evergreen Rich (Mgr: A W Bott, P K Siu, M Siu &amp; E Siu)" dob="2010-09-18T00:00:00" age="6" sex="M" career="18-3-3-4 6860.00" thistrack="3-1-0-1 375.00" thisdistance="1-1-0-0 250.00" goodtrack="14-3-2-4 0335.00" heavytrack="2-0-0-0 5.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="3-1-0-0 125.00" secondup="3-0-1-2 100.00" mindistancewin="0" maxdistancewin="0" finished="8" weightvariation="0" variedweight="54" decimalmargin="2.70" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="9" saddlecloth="9" horse="Skyline Blush" id="182533" idnumber="" regnumber="" blinkers="1" trainernumber="38701" trainersurname="Cummings" trainerfirstname="Anthony" trainertrack="Randwick" rsbtrainername="Anthony Cummings" jockeynumber="1472" jockeysurname="McEvoy" jockeyfirstname="Kerrin" barrier="4" weight="54" rating="80" description="B M 4 Northern Meteor x Cara Y Cruz(USA) (King of Kings(IRE))" colours="Red, Black Stripes" owners="Gooree Stud (E M Cojuangco &amp; M C Cummings)" dob="2011-10-29T00:00:00" age="5" sex="M" career="14-5-0-2 4190.00" thistrack="4-1-0-1 225.00" thisdistance="2-1-0-1 375.00" goodtrack="7-0-0-1 535.00" heavytrack="4-2-0-1 1125.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="3-1-0-0 125.00" secondup="3-0-0-1 460.00" mindistancewin="0" maxdistancewin="0" finished="9" weightvariation="0" variedweight="54" decimalmargin="3.10" penalty="0" pricestarting=".50" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="5" saddlecloth="5" horse="All Cerise" id="171801" idnumber="" regnumber="" blinkers="0" trainernumber="681" trainersurname="Waller" trainerfirstname="Chris" trainertrack="Rosehill" rsbtrainername="Chris Waller" jockeynumber="86721" jockeysurname="Dunn" jockeyfirstname="Dwayne" barrier="3" weight="54" rating="92" description="B M 5 Redoute's Choice x Trick Taker(USA) (Capote(USA))" colours="Purple, White Hoops, Black Seams, Purple And White Quartered Cap" owners="Woppitt Bloodstock (Mgr: Mrs D N Kepitis)" dob="2010-11-05T00:00:00" age="6" sex="M" career="28-6-3-3 9890.00" thistrack="10-1-1-1 1750.00" thisdistance="0-0-0-0" goodtrack="21-6-2-3 7690.00" heavytrack="2-0-0-0 0.00" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="7-1-0-2 790.00" secondup="4-1-0-0 200.00" mindistancewin="0" maxdistancewin="0" finished="10" weightvariation="0" variedweight="54" decimalmargin="4.10" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
    <nomination number="1" saddlecloth="1" horse="Gust of Wind (NZ)" id="181079" idnumber="" regnumber="" blinkers="1" trainernumber="41655" trainersurname="Sargent" trainerfirstname="John" trainertrack="Randwick" rsbtrainername="John Sargent" jockeynumber="84015" jockeysurname="Avdulla" jockeyfirstname="Brenton" barrier="2" weight="59" rating="106" description="B M 4 Darci Brahma(NZ) x Starrystarrynight(IRE) (Sadler's Wells(USA))" colours="Yellow, White Checked Sash, Checked Sleeves And Cap" owners="Go Bloodstock (Mgr: Sir O G Glenn)" dob="2011-09-07T00:00:00" age="5" sex="M" career="12-3-0-0 4900.00" thistrack="0-0-0-0" thisdistance="0-0-0-0" goodtrack="10-2-0-0 9150.00" heavytrack="0-0-0-0" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="4-1-0-0 00.00" secondup="3-1-0-0 250.00" mindistancewin="0" maxdistancewin="0" finished="11" weightvariation="0" variedweight="59" decimalmargin="7.40" penalty="0" pricestarting="" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
  </race>
</meeting>

该问题的答案适用于示例代码。

import xmltodict


with open('20160319RHIL0_edit.xml') as f:
    my = xmltodict.parse(f.read())
    for condition in my['meeting']['race']['condition']:
        print(condition["@line"])

然而,在此处引用的完整 XML 上使用 Pasted 失败并出现打字错误

with open('20160319RHIL0.xml') as f:
    my = xmltodict.parse(f.read())
    for condition in my['meeting']['race']['condition']:
        print(condition["@line"])

Pasted Full XML

runfile('C:/Users/Sayth/.spyder2-py3/temp.py', wdir='C:/Users/Sayth/Documents')
Traceback (most recent call last):

  File "<ipython-input-2-bbaf7572afd1>", line 1, in <module>
    runfile('C:/Users/Sayth/.spyder2-py3/temp.py', wdir='C:/Users/Sayth/Documents')

  File "C:\Users\Sayth\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile
    execfile(filename, namespace)

  File "C:\Users\Sayth\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 88, in execfile
    exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)

  File "C:/Users/Sayth/.spyder2-py3/temp.py", line 13, in <module>
    for condition in my['meeting']['race']['condition']:

TypeError: list indices must be integers or slices, not str

导致结果出现这种差异的 XML 结构有何不同?

由于有多个 races 和多个 conditions,它们被表示为 python 列表,您将不得不遍历它们:

for race in my['meeting']['race']:
    for condition in race['condition']:
        print(condition["@line"])

我可以根据你的真实 XML 数据工作。打印:

1
3
5
1
...
2
3
5