在python3中使用elementtree将标签的内容存储在字符串中



我使用Python 3.7.2和elementtree来复制XML文件中标记的内容。

我的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>nBblsUR-uH..6jmGgZNHLQAAAXgXN1Lu</MsgId>
<CreDtTm>2016-11-10T12:00:00.000+01:00</CreDtTm> 
<NbOfTxs>1</NbOfTxs>
<CtrlSum>6</CtrlSum>
<InitgPty>
<Nm>TC 03000 Kunde 55 Protokollr ckf hrung</Nm>
</InitgPty>
</GrpHdr>
</CstmrCdtTrfInitn>
</Document>

我想复制'MsgId'标签的内容并将其保存为字符串。我以前已经用minidom做到了这一点,但由于新的情况,我现在不得不用elementtree来解决。这是带有minidom:

的代码
dom = xml.dom.minidom.parse('H:\app_python/in_spsh/{}'.format(filename_string)) 
message = dom.getElementsByTagName('MsgId')
for MsgId in message:
print(MsgId.firstChild.nodeValue)

现在我想对elementtree做同样的事情。我怎样才能做到这一点呢?

要获取单个元素的文本值,可以使用findtext()方法。需要考虑命名空间

from xml.etree import ElementTree as ET
tree = ET.parse("test.xml")   # Your XML document
msgid = tree.findtext('.//{urn:iso:std:iso:20022:tech:xsd:pain.001.003.03}MsgId')

在Python 3.8及更高版本中,可以对命名空间使用通配符:

msgid = tree.findtext('.//{*}MsgId')

最新更新