Home > Blockchain >  XML file update using python
XML file update using python

Time:11-21

I am new to python and XML. I need to delete UserName and all his corresponding FeatureIds from the XML file. I tried using xml.etree.ElementTree but not able to delete FeatureIds. Any help will be greatly appreciated.

Sample XML

<?xml version="1.0" encoding="utf-8"?>
<BusinessRule>
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <CovRDMMetaData>
        <Config>
            <Type>Business Rule</Type>
            <Category>Device</Category>
        </Config>
        <Properties>
            <PropertyInfo>
                <Rule>
                    <Name>FeatureEntitlementDetails</Name>
                    <Path>Rules\FeatureEntitlementDetails.xml</Path>
                    <Version>4.0.12</Version>
                </Rule>
                <Target>
                    <ClientName>Money Exchange Client</ClientName>
                    <ClientVersion>7.8.7</ClientVersion>
                    <DeviceType>Money AP15</DeviceType>
                </Target>
            </PropertyInfo>
        </Properties>
    </CovRDMMetaData>
    <CovRDMData>
        <SetFeatureRetirement>
             <IsRetired>No</IsRetired>
             <MessageIfRetired>Please upgrade ROLEX client to use Set Feature option</MessageIfRetired>
       </SetFeatureRetirement>
       <EnabledFeatureListForUsers>
           <FeatureEntitlementDetail>
              <UserName>[email protected]</UserName>
              <FeatureList>
                    <FeatureDetail>
                        <FeatureId>0</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>1</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>2</FeatureId>            
                    </FeatureDetail>                    
                    <FeatureDetail>
                        <FeatureId>3</FeatureId>            
                    </FeatureDetail>                    
                    <FeatureDetail>
                        <FeatureId>4</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>5</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>6</FeatureId>            
                    </FeatureDetail>
                </FeatureList>
            </FeatureEntitlementDetail>
            <FeatureEntitlementDetail>
              <UserName>[email protected]</UserName>
              <FeatureList>
                    <FeatureDetail>
                        <FeatureId>0</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>1</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>2</FeatureId>            
                    </FeatureDetail>                    
                    <FeatureDetail>
                        <FeatureId>3</FeatureId>            
                    </FeatureDetail>                    
                    <FeatureDetail>
                        <FeatureId>4</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>5</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>6</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>7</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>8</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>9</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>10</FeatureId>           
                    </FeatureDetail>
                </FeatureList>
            </FeatureEntitlementDetail>
            <FeatureEntitlementDetail>
              <UserName>[email protected]</UserName>
              <FeatureList>
                    <FeatureDetail>
                        <FeatureId>0</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>1</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>2</FeatureId>            
                    </FeatureDetail>                    
                    <FeatureDetail>
                        <FeatureId>3</FeatureId>            
                    </FeatureDetail>                    
                    <FeatureDetail>
                        <FeatureId>4</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>5</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>6</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>7</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>8</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>9</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>10</FeatureId>           
                    </FeatureDetail>
                </FeatureList>
            </FeatureEntitlementDetail>
                          <FeatureEntitlementDetail>
              <UserName>[email protected]</UserName>
              <FeatureList>
                    <FeatureDetail>
                        <FeatureId>7</FeatureId>            
                    </FeatureDetail>
                </FeatureList>
            </FeatureEntitlementDetail>
       </EnabledFeatureListForUsers>
    </CovRDMData>
</BusinessRule>

For example I want to delete UserName raj and all his FeatureIds from 0 to 6. Thanks in advance.

CodePudding user response:

You can achieve that using beautifulsoup. Docs

  • First select the <UserName> with text (as Raj in this case.).
  • Find it's parent i.e the <FeatureEntitlementDetail> using the .findParent() method.
  • Now deleting the <FeatureEntitlementDetail> will delete the entire tree of Username Raj. You can do that using .decompose()

Here is the full code.

import requests
from bs4 import BeautifulSoup

s = """<YOUR XML GOES HERE>"""

soup = BeautifulSoup(s, 'xml')
u = soup.find('UserName', text='[email protected]')
fed = u.findParent()

fed.decompose()
print(soup.prettify())

You can see that there is no <UserName> Raj and it's related <FeatureIds> by printing the soup.

  • Related