Как получить содержимое child-> child-> child-> child в файле XML, используя Python - PullRequest
1 голос
/ 16 января 2020
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.056.001.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <FIToFIPmtCxlReq>
            <Assgnmt>
                <Id>TEST-ISO-81</Id>
                <Assgnr>
                    <Agt>
                        <FinInstnId>
                            <BIC>CCCCGB2L</BIC>
                        </FinInstnId>
                    </Agt>
                </Assgnr>
                <Assgne>
                    <Agt>
                        <FinInstnId>
                            <BIC>MMMMGB2L</BIC>
                        </FinInstnId>
                    </Agt>
                </Assgne>
                <CreDtTm>2009-03-24T11:22:59</CreDtTm>
            </Assgnmt>
            <TxInf>
                <CxlId>103012345</CxlId>
                <Case>
                    <Id>ISO_TEST_CASE</Id>
                    <Cretr>
                            <Agt>
                                <FinInstnId>
                                    <BIC>MMMMGB2L</BIC>
                                </FinInstnId>
                            </Agt>
                    </Cretr>
                </Case>
            </TxInf>
     </Undrlyg>
    </FIToFIPmtCxlReq>
</Document>

Здесь я хочу получить содержимое "TxInf", как и все его дочерние и дочерние элементы потомков, и данные.

Я попробовал:

import xml.etree.ElementTree as ET
from xml.etree import ElementTree
tree = ET.parse('R3-CAMT.056.001.07-ISO-V.XML')
root = tree.getroot()
for element in root.iter():
    if element.tag == "{urn:iso:std:iso:20022:tech:xsd:camt.056.001.01}TxInf":
        tree._setroot(element.tag)
        print(root.tag)
        print(root.attrib)

Пожалуйста, предложите, если я могу изменить root с _set root или любым другим возможным методом

1 Ответ

0 голосов
/ 16 января 2020

Попробуйте что-то вроде этого в своем коде, чтобы увидеть, работает ли он:

for r in root.findall(".//*"):
    if 'TxInf' in r.tag:
        print(ET.tostring(r))

Кстати, это может быть проще сделать с помощью l xml, если вы можете его использовать.

...