2016-05-06 7 views
0

Я получаю ответ XML, как показано нижекак использовать ElementTree вынимать конкретные данные XML из XML

<entitlement> 
    <externalId></externalId> 
    <entitlementAsWhole>false</entitlementAsWhole> 
    <eId>1c7fd51c-8f12-46e8-a4b7-f1f9c614df82</eId> 
<entitlementType>PARENT</entitlementType> 
<linkedEntId/> 
    <product> 
    <productIdentifier> 
     <prdExternalId></prdExternalId> 
     <productId>7</productId> 
     <productNameVersion> 
     <productName>test2_porduct</productName> 
     <productVersion>1.0.0</productVersion> 
     </productNameVersion> 
    </productIdentifier> 
    <feature> 
     <featureIdentifier> 
     <ftrExternalId></ftrExternalId> 
     <featureId>7</featureId> 
     <featureIdentity>null</featureIdentity> 
     <ftrNameVersion> 
      <featureName>test2_feature</featureName> 
      <featureVersion>1.0.0</featureVersion> 
     </ftrNameVersion> 
     </featureIdentifier> 
     <activationAttributes> 
    <attributeGroup groupName="LOCKING"> 
     <attribute> 
     <attributeName>CLIENT_1_CRITERIA</attributeName> 
     <attributeValue>4</attributeValue> 
     <readOnly>true</readOnly> 
     <mandatory>false</mandatory> 
     </attribute> 
     <attribute> 
     <attributeName>CLIENT_1_INFO</attributeName> 
     <attributeValue></attributeValue> 
     <readOnly>false</readOnly> 
     <mandatory>true</mandatory> 
     </attribute> 
    </attributeGroup> 
    </activationAttributes> 
    <entitlementItemAttributes/> 
</Item> 
</productKey> 
<entitlementAttributes/> 
</entitlement> 

И я хочу, чтобы получить XML из выше XML, имеющим только активацию атрибута Фейлда некоторых вещей, как показано ниже: -

<activationAttributes> 
    <attributeGroup groupName="LOCKING"> 
     <attribute> 
     <attributeName>CLIENT_1_CRITERIA</attributeName> 
     <attributeValue>4</attributeValue> 
     <readOnly>true</readOnly> 
     <mandatory>false</mandatory> 
     </attribute> 
     <attribute> 
     <attributeName>CLIENT_1_INFO</attributeName> 
     <attributeValue></attributeValue> 
     <readOnly>false</readOnly> 
     <mandatory>true</mandatory> 
     </attribute> 
    </attributeGroup> 
    </activationAttributes> 

, как я могу это сделать, я пытался, как показано ниже, где resp.txt содержит Orginal XML однако это не помогло

activation_attribute = et.fromstring(resp.text).findall('activationAttributes') 

ответ

1

Использование find() получить только один элемент, а затем использовать tostring(), чтобы получить необработанный XML-представление выбранного элемента:

from xml.etree import cElementTree as et 

..... 

root = et.fromstring(resp.text) 
activation_attribute = root.find('.//activationAttributes') 
print et.tostring(activation_attribute)