使用 python 更新 XML 文件 - 添加新的 UserName 和 FeatureIds

Update XML file with python - add new UserName and FeatureIds

我是 python 和 XML 的新手。我需要将 UserName 及其所有相应的 FeatureId 添加到 XML 文件中。任何帮助将不胜感激。例如,我想添加用户名 john@abc.com 和他的 FeatureIds 3,5,6。它可以是用户列表中的任何位置,即开头或中间或末尾,但结构与其他用户名相同。提前致谢。

样本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>

预期输出:

<?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>john@abc.com</UserName>
              <FeatureList>                 
                    <FeatureDetail>
                        <FeatureId>3</FeatureId>            
                    </FeatureDetail>                    
                    <FeatureDetail>
                        <FeatureId>5</FeatureId>            
                    </FeatureDetail>
                    <FeatureDetail>
                        <FeatureId>6</FeatureId>            
                    </FeatureDetail>
                </FeatureList>
            </FeatureEntitlementDetail>  
       ***
       
           <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 和他的 FeatureIds 提前致谢

见下文。 (想法是创建一个新的 FeatureEntitlementDetail,填充它并将其附加到正确位置的文档。)

import xml.etree.ElementTree as ET

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>'''

root = ET.fromstring(xml)

data = {'UserName':'john@abc.com','Features':[3,5,6]}

details = ET.Element("FeatureEntitlementDetail")
user_name = ET.SubElement(details,'UserName')
user_name.text = data['UserName']
feature_list = ET.SubElement(details,'FeatureList')

for f in data['Features']:
  ele = ET.SubElement(feature_list,'FeatureDetail')
  sub_ele = ET.SubElement(ele,'FeatureId')
  sub_ele.text = str(f)
root.find('.//EnabledFeatureListForUsers').append(details)
ET.dump(root)