【问题标题】:XML file update using python使用 python 更新 XML 文件
【发布时间】:2021-12-31 07:20:38
【问题描述】:

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

示例 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>

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

【问题讨论】:

  • "我尝试使用 xml.etree.ElementTree 但无法删除 FeatureIds。" - 请向我们展示您的代码。
  • 删除用户名是指删除整个&lt;FeatureEntitlementDetail&gt; &lt;UserName&gt;
  • @Ram 是的,我想删除整个&lt;FeatureEntitlementDetail&gt; &lt;UserName&gt;
  • @mzjn 我是 xml 新手。我的代码不成熟。这就是为什么我没有发布它。

标签: python xml parsing


【解决方案1】:

您可以使用beautifulsoup 来实现。 Docs

  • 首先选择带有文本的&lt;UserName&gt;(在本例中为 Raj。)。
  • 使用.findParent() 方法查找它的父对象,即&lt;FeatureEntitlementDetail&gt;
  • 现在删除&lt;FeatureEntitlementDetail&gt; 将删除用户名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 看到没有&lt;UserName&gt; Raj 并且它与&lt;FeatureIds&gt; 相关。

【讨论】:

  • 请告诉我如何安装请求、bs4 和美汤
  • 您可以使用pip 做到这一点。看到这个 - pip.pypa.io/en/stable/cli/pip_install
  • 是的,我安装了它们它工作。谢谢
  • 如果我想为 ex 添加新用户名 john@abc.com 和 featureIds 例如 3、5、6。该怎么做?
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多