首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据条件删除XML中的块

如何根据条件删除XML中的块
EN

Stack Overflow用户
提问于 2021-05-17 00:27:53
回答 1查看 26关注 0票数 0

我的XML文件包含10k个用户,我需要删除电子邮件不包含@acme.com的所有用户

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<users type="array">
  <user>
    <id type="integer">14000760626</id>
    <name> Credentialing Department</name>
    <email>user1@acme.com</email>
    <created-at type="dateTime">2020-03-26T10:23:34-04:00</created-at>
    <updated-at type="dateTime">2020-03-26T10:23:34-04:00</updated-at>
    <active type="boolean">false</active>
    <job-title></job-title>
    <phone>1234567890</phone>
    <mobile>1234567890</mobile>
    <description></description>
    <time-zone>Eastern Time (US &amp; Canada)</time-zone>
    <deleted type="boolean">false</deleted>
    <language>en</language>
    <address></address>
    <external-id nil="true"/>
    <helpdesk-agent type="boolean">false</helpdesk-agent>
    <location-name nil="true"/>
    <time-format>12h</time-format>
    <company-names type="array"/>
    <custom_field>
    </custom_field>
  </user>
</users>

我试图关注how do I filter values from XML file in python,但是在修改下面这行代码时被卡住了:

代码语言:javascript
复制
>>> xmldata.xpath('/localization/b[@n="Levels"]/l[@k=$level]/v/text()',level='Level1')
['Beginner Level']

我也尝试了其他方法,但总是会丢失一些数据,例如结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<users type="array">
<user>
<id>14000760626</id>
<name> Credentialing Department</name>
<email>test@aoncology.com</email>
<created-at>2020-03-26T10:23:34-04:00</created-at>
<updated-at>2020-03-26T10:23:34-04:00</updated-at>
<active>false</active>
<job-title>None</job-title>
<phone>1234567890</phone>
<mobile>1234567890</mobile>
<description>None</description>
<time-zone>Eastern Time (US & Canada)</time-zone>
<deleted>false</deleted>
<language>en</language>
<address>None</address>
<external-id>None</external-id>
<helpdesk-agent>false</helpdesk-agent>
<location-name>None</location-name>
<time-format>12h</time-format>
<company-names>None</company-names>
<custom_field>
    </custom_field>
</user>

</users>
EN

回答 1

Stack Overflow用户

发布于 2021-05-17 00:56:29

如果我没理解错的话,你要找的东西是这样的:

假设一个简化的XML:

代码语言:javascript
复制
users = """<?xml version="1.0" encoding="UTF-8"?>
<users type="array">
  <user>
    <id type="integer">14000760626</id>
    <name> Credentialing Department</name>
    <email>user1@acme.com</email>      
  </user>
  <user>
    <id>14000760626</id>
    <name> Credentialing Department</name>
    <email>test@aoncology.com</email>
   </user>
</users>"""

然后:

代码语言:javascript
复制
doc = etree.XML(users.encode())
for user in doc.xpath('//users/user'):        
    if not "acme" in user.xpath('./email')[0].text:
        user.getparent().remove(user)
print(etree.tostring(doc).decode())

输出:

代码语言:javascript
复制
<users type="array">
  <user>
    <id type="integer">14000760626</id>
    <name> Credentialing Department</name>
    <email>user1@acme.com</email>      
  </user>
  </users>

从lxml导入etree

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67559084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档