예를 들면
<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>
다음은이 예에서 첫 번째 I는 업데이트 할 (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")
EDIT2
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"
이 코드로 나는 distname
일치 하는 것을 찾으려고 regex 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'
귀하의 질문을 올바르게 이해했기를 바랍니다. 그러면 모든 distName="MB-85404/TB-85404/ST-4/[a or b or c]"
태그 를 찾아서 태그를 대체 하고 업데이트 할 것 85404
입니다 .85409
<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>
편집 : 모든에서 변경하려면 다음 85404
을 수행 할 수 있습니다.85409
distName=
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] 삭제
몇 마디 만하겠습니다