XML 文件更新使用 python

XML file update using python

我是 python 和 XML 的新手。我需要从 XML 文件中删除 UserName 及其所有相应的 FeatureId。我尝试使用 xml.etree.ElementTree 但无法删除 FeatureId。任何帮助将不胜感激。

样本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>raj@abc.com</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>mana@abc.com</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>thomas@abc.com</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>anyka@abc.com</UserName>
              <FeatureList>
                    <FeatureDetail>
                        <FeatureId>7</FeatureId>            
                    </FeatureDetail>
                </FeatureList>
            </FeatureEntitlementDetail>
       </EnabledFeatureListForUsers>
    </CovRDMData>
</BusinessRule>

例如,我想删除 UserName raj 和他的所有 FeatureIds 从 0 到 6。提前致谢。

您可以使用 beautifulsoup 来实现。 Docs

  • 首先 select 带有文本的 <UserName>(在本例中为 Raj)。
  • 使用 .findParent() 方法找到它的父级,即 <FeatureEntitlementDetail>
  • 现在删除 <FeatureEntitlementDetail> 将删除用户名 Raj 的整个树。您可以使用 .decompose()

这是完整的代码。

import requests
from bs4 import BeautifulSoup

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

soup = BeautifulSoup(s, 'xml')
u = soup.find('UserName', text='raj@abc.com')
fed = u.findParent()

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

通过打印 soup.

可以看到没有 <UserName> Raj 并且它与 <FeatureIds> 相关