【问题标题】:Update XML file with python - add new UserName and FeatureIds使用 python 更新 XML 文件 - 添加新的 UserName 和 FeatureIds
【发布时间】:2021-12-31 08:28:54
【问题描述】:

我是 python 和 XML 的新手。我需要将 UserName 和他所有相应的 FeatureIds 添加到 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>

我在需要添加新用户名和他的 FeatureIds 的开头和结尾添加了 *** 提前致谢

【问题讨论】:

  • @Ram 你能看看这个吗?
  • 分享预期的输出。假设你已经分享了什么是输入。 准确地解释 xml 文档是如何更改的。
  • @balderman 我已经编辑了这个问题。添加预期输出
  • 所以你想添加一个新的FeatureEntitlementDetail - 对吧?
  • 是的。我想用他的用户名和 featureIds 添加新的FeatureEntitlementDetail

标签: python xml parsing


【解决方案1】:

见下文。 (想法是创建一个新的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)

【讨论】:

  • 我们需要在UserName标签之后添加&lt;FeatureList&gt;标签,您能修改一下代码吗?
  • 好的。代码已更新。希望它对你有用。
  • 非常感谢。那行得通
  • 花时间理解代码非常重要,这样你才能从中学习。
  • 为什么不找到&lt;EnabledFeatureListForUsers&gt;节点并在这个节点上创建SubElement,而不是在后面追加呢?
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多