<p>这里有一个相对简单的解决方案,但它使用lxml而不是xml.etree.ElementTree。为了简单起见,我只专注于更改节点值;显然,您必须采用它来满足其他需求</p>
<pre><code>policy = """[your xml above]""" #if parsing from an xml string
from lxml import etree
doc = etree.XML(policy.encode()) #if parsing from an xml string
doc = etree.parse(r'path\to\your\file\policy.xml') #if parsing from a file
replacements = ["some random policy number","some random date"]
targets = doc.xpath('//ROW[PolicyId="POL000002NGJ"]')
for target in targets:
target.xpath('./PolicyId')[0].text = replacements[0]
target.xpath('.//TransactionDate')[0].text = replacements[1]
print(etree.tostring(doc).decode())
# or to save to a new file:
doc.write('new_policy.xml', pretty_print=True, xml_declaration=True, encoding="utf-8")
</code></pre>
<p>输出:</p>
<pre><code><TABLE>
<ROW>
<PolicyId>some random number</PolicyId>
<BusinessCoverageCode>COV00002D3X1</BusinessCoverageCode>
<TransactionDate>some random date</TransactionDate>
</ROW>
<ROW>
<PolicyId>some random number</PolicyId>
<BusinessCoverageCode>COV00002D3X1</BusinessCoverageCode>
<TransactionDate>some random date</TransactionDate>
</ROW>
<ROW>
<PolicyId>some random number</PolicyId>
<BusinessCoverageCode>COV00002D3X4</BusinessCoverageCode>
<TransactionDate>some random date</TransactionDate>
</ROW>
<ROW>
<PolicyId>POL111111NGJ</PolicyId>
<BusinessCoverageCode>COV00002D3X4</BusinessCoverageCode>
<TransactionDate>2020-03-23T10:56:15.00</TransactionDate>
</ROW>
</TABLE>
</code></pre>