名前空間付きXMLファイルの読み込み・パース
こちらを参考にさせて頂きました。
https://qiita.com/yuki2006/items/d84b37f07b70d02c5504
が、デフォルト名前空間のXMLパースが出来ず、はまりました。
結果的に処理用の仮想的なNamespaceを定義しないとうまくできませんでした。
以下は
デフォルト名前空間が、'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'
読み込みたいXML Pathが、
CstmrCdtTrfInitn/PmtInf/CdtTrfTxInf/RmtInd/Strd/Invcee/CtctDtls/Othr
であった場合のものです。
やむなく'1'というNamespaceを処理用に定義しています。
ns = {'1': 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'}
Ref_Xpath = ".//1:CstmrCdtTrfInitn/1:PmtInf/1:CdtTrfTxInf/1:RmtInf/1:Strd/1:Invcee/1:CtctDtls/1:Othr" # Search Xpath for pain.001-pain.002 matching reference tag
for i in root.findall(Ref_Xpath, ns):
RefList.append(i.text)
名前空間付きXMLファイルの書き出し
こちらはさらにはまりました。
ElementTreeでの出力はあきらめ、
名前空間なしで出力したXMLを、通常のファイル入出力で読み込んで、文字列置換して、名前空間を埋め込みました。
きっともっといいやり方はあると思いますが、私は見つけられませんでした。