for循环:通过ElementTree Python3解析XML

时间:2015-01-22 19:41:54

标签: python xml

我设计了这个简化的XML文件,它非常类似于我必须解析的XML文件。我试图解析以下节点中的文本(Food,Date,ItemCondition,Amount)

<?xml version="1.0"?>
<Region>
  <District>
    <Store>
      <Department>
        <Produce>        
          <Food>Apple</Food>
        </Produce>
      </Department>
      <ProductInfo>
        <BoxofFruit>
          <Qualifiers>
            <ItemCondition>New</ItemCondition>
          </Qualifiers>        
          <Date>101214</Date>
          <Price>
            <LandedPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>19.99</Amount>
            </LandedPrice>          
          </Price>       
        </BoxofFruit>
        <BoxofFruit>
          <Qualifiers>
            <ItemCondition>New</ItemCondition>
          </Qualifiers>        
          <Date>091114</Date>
          <Price>
            <LandedPrice>
              <CurrencyCode>USD</CurrencyCode>
              <Amount>21.99</Amount>
            </LandedPrice>          
          </Price>       
        </BoxofFruit>     
      </ProductInfo>
    </Store>
  </District>
</Region>

对于我的生活,我似乎无法得到食物文本。继承了我现有的代码,只要我不包含食品部分就可以了。

Fruit = root.findall('.//BoxofFruit')
for Apple in Fruit:
    Date = Apple.find('Date').text
    Condition = Apple.find('Qualifiers/ItemCondition').text
    Price = Apple.find('Price/LandedPrice/Amount').text
    print(Date, Condition, Price)

这是我从代码中收到的内容:

101214 New 19.99
091114 New 21.99

以下是我希望看到的一个例子:

Apple 101214 New 19.99
Apple 091114 New 21.99
多年来,我一直在摸索这一点。我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

由于Food不在BoxofFruit,因此您必须事先获取它。例如:

fruit = root.find('.//Food').text
for Apple in root.findall('.//BoxofFruit')
    Date = Apple.find('Date').text
    Condition = Apple.find('Qualifiers/ItemCondition').text
    Price = Apple.find('Price/LandedPrice/Amount').text
    print(fruit, Date, Condition, Price)