如何使用python查找和更新XML文件内容

阿卡什·拉索(Akash Rathor)

例如

 <managedObject class="New" distName="MB-85404/TB-85404/ST-4/a" version="xL20A_1911_002" operation="open">
          <p name="a">320ms</p>
          <p name="b">enabled</p>
          <p name="c">640ms</p>
          <p name="d">320ms</p>
          <p name="e">640ms</p>
          <p name="f">1280ms</p>
          <p name="g">6</p>
    </managedObject>
<managedObject class="new" distName="AL-76867/MB-85404/TB-85404/ST-4/b" version="xL20A_1911_002" operation="open">
          <p name="h">320ms</p>
          <p name="i">enabled</p>
          <p name="j">640ms</p>
          <p name="k">320ms</p>
          <p name="l">640ms</p>
          <p name="a">1280ms</p>
          <p name="l">6</p>
    </managedObject>
<managedObject class="New" distName="MB-85404/TB-85404/ST-4/c" version="xL20A_1911_002" operation="open">
          <p name="a">320ms</p>
          <p name="p">enabled</p>
          <p name="q">640ms</p>
          <p name="r">320ms</p>
          <p name="s">640ms</p>
          <p name="t">1280ms</p>
          <p name="u">6</p>
    </managedObject>

在此示例中,我首先要更新(distName="MB-85404/TB-85404/ST-4/[a or b or c]")(distName="MB-85409/TB-85409/ST-4/[a or b or c]")

对整个XML文件执行此操作之后。

这样做之后,我想更新变量的值name="a"用于其<managedObject class="New" distName="MB-85409/TB-85409/ST-4/[a or b or c] >

我该怎么做,我有一个40000+行的XML文件。

编辑1

with open("C:/files/abcd.xml", "w+") as file:
    xml_data = file.read()
    xml_data.replace("85409","85904")
    file.write("outPuta.xml")

编辑2

soup = bs(content,"xml")
    loc = re.compile(r'[A-Z]+-+[0-9]+/+SMOD+-+[1-9]')
    for i in soup.find_all('managedObject', distName=loc):
        locat=i.find('p',{'name':'moduleLocation'})
        locat.string="3444 South texas"

通过此代码,我试图找到distnameregex loc匹配的代码,并managedObject试图找到标记,<p name="moduleLocation" 4444 New York>并且想要更新"4444 New York""3444 South texas",这给了我下面提到的错误

locat.string="3444 South texas"
AttributeError: 'NoneType' object has no attribute 'string'
安德烈·凯斯利(Andrej Kesely)

我希望我理解你的问题吧,这会发现所有distName="MB-85404/TB-85404/ST-4/[a or b or c]"的标签和替换8540485409和更新<p name="a">标签:

import re
from bs4 import BeautifulSoup


xml_data = ''' <managedObject class="New" distName="MB-85404/TB-85404/ST-4/a" version="xL20A_1911_002" operation="open">
          <p name="a">320ms</p>
          <p name="b">enabled</p>
          <p name="c">640ms</p>
          <p name="d">320ms</p>
          <p name="e">640ms</p>
          <p name="f">1280ms</p>
          <p name="g">6</p>
    </managedObject>
<managedObject class="new" distName="AL-76867/MB-85404/TB-85404/ST-4/b" version="xL20A_1911_002" operation="open">
          <p name="h">320ms</p>
          <p name="i">enabled</p>
          <p name="j">640ms</p>
          <p name="k">320ms</p>
          <p name="l">640ms</p>
          <p name="a">1280ms</p>
          <p name="l">6</p>
    </managedObject>
<managedObject class="New" distName="MB-85404/TB-85404/ST-4/c" version="xL20A_1911_002" operation="open">
          <p name="a">320ms</p>
          <p name="p">enabled</p>
          <p name="q">640ms</p>
          <p name="r">320ms</p>
          <p name="s">640ms</p>
          <p name="t">1280ms</p>
          <p name="u">6</p>
    </managedObject>'''

soup = BeautifulSoup('<data>' + xml_data + '</data>', 'xml')

r = re.compile(r'^MB-85404/TB-85404/ST-4/(?:a|b|c)')

for o in soup.find_all('managedObject', distName=r):
    o['distName'] = o['distName'].replace('85404', '85409')
    p = o.find('p', {'name':'a'})
    p.string = 'UPDATED ' + p.string

soup.data.unwrap()
print(soup)

印刷品:

<?xml version="1.0" encoding="utf-8"?>
 <managedObject class="New" distName="MB-85409/TB-85409/ST-4/a" operation="open" version="xL20A_1911_002">
<p name="a">UPDATED 320ms</p>
<p name="b">enabled</p>
<p name="c">640ms</p>
<p name="d">320ms</p>
<p name="e">640ms</p>
<p name="f">1280ms</p>
<p name="g">6</p>
</managedObject>
<managedObject class="new" distName="AL-76867/MB-85404/TB-85404/ST-4/b" operation="open" version="xL20A_1911_002">
<p name="h">320ms</p>
<p name="i">enabled</p>
<p name="j">640ms</p>
<p name="k">320ms</p>
<p name="l">640ms</p>
<p name="a">1280ms</p>
<p name="l">6</p>
</managedObject>
<managedObject class="New" distName="MB-85409/TB-85409/ST-4/c" operation="open" version="xL20A_1911_002">
<p name="a">UPDATED 320ms</p>
<p name="p">enabled</p>
<p name="q">640ms</p>
<p name="r">320ms</p>
<p name="s">640ms</p>
<p name="t">1280ms</p>
<p name="u">6</p>
</managedObject>

编辑:要更改8540485409distName=,您可以执行以下操作:

for o in soup.find_all('managedObject', {'distName': True}):
    o['distName'] = o['distName'].replace('85404', '85409')

EDIT2:要替换整个文件:

with open("C:/files/abcd.xml", "r") as f_in:
    xml_data = f_in.read()

with open("C:/files/output.xml", "w") as f_out:
    f_out.write(xml_data.replace("85409","85904"))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用python beautifulsoup更新xml文件

如何防止SSMS查找和替换“查找”文件中的内容

如何使用 Swift 编辑和更新 xml 文件

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

如何使用C ++ / CLI查找节点的给定内容并修改xml文件

如何使用python遍历路径并查找文件和目录?

使用python更新XML文件

如何在PowerShell中查找和替换文件内容?

Python使用HTML内容解析XML文件

如何使用python和ruamel更新此Yaml文件?

使用lxml和python查找子xml元素后如何获取父xml元素

如何使用remove()重命名和删除C ++中的txt文件以更新内容?

如何使用Python搜索和替换XML文件中的文本?

如何使用python请求(获取)和读取xml文件?

如何使用XSL查找确切的xml内容

如何使用 ElementTree 在具有命名空间的 XML 文件中查找和编辑标签

使用C#根据元素的属性更新XML文件的内容

稀疏文件:如何查找内容

如何使用xmlstarlet更新xml文件

如何使用C#更新xml文件

如何使用PHP更新xml文件?

如何使Apache Tika在.java和.xml(等)文件中查找文本

如何使用XPath和Java更新XML

如何使用python查找元素并替换xml文件中元素名称相同的值?

如何使用Python使用Unicode编码查找和替换* .txt文件中的字符串?

如何使用Python获取XML文件中child-> child-> child-> child的内容

如何查找Python文件使用哪些模块

在JSON文件中查找节点,更新内容,然后使用c#保存回JSON文件

如何使用python读取.txt文件的内容?