Как записать данные ElementTree в файл в python - PullRequest
1 голос
/ 30 марта 2020

Я создал образец XML файла, подобного этому:

from lxml import etree
import xml.etree.ElementTree as et
root = etree.Element("{" + link + "}linkbase", attrib={"{" + xsi + "}schemaLocation" : schemaLocation}, nsmap=ns)
ch1_lvl1 = etree.SubElement(root, "{" + link + "}referenceLink", attrib={"{" + xlink + "}type" : elem_type[0], "{" + xlink + "}role" : role_prefix + role[0]})
ch1_lvl2 = etree.SubElement(ch1_lvl1, "{" + link + "}loc", attrib={"{" + xlink + "}type" : elem_type[1], "{" + xlink + "}href" : ch1_lvl2_href, "{" + xlink + "}label" : ch1_lvl2_label})
ch2_lvl2 = etree.SubElement(ch1_lvl1, "{" + link + "}reference", attrib={"{" + xlink + "}type" : elem_type[2], "{" + xlink + "}label" : ch2_lvl2_label, "{" + xlink + "}role" : role_prefix + role[1], "{" + xlink + "}id" : ch2_lvl2_id} )
ch1_lvl3 = etree.SubElement(ch2_lvl2, "{" + in_rbi_rep_par + "}Circular").text="DBS.No.FBC.BC.34/13.12.001/99-2000  dt April 6, 2000"
print(etree.tostring(root, pretty_print=True).decode("utf-8"))
r = etree.tostring(root).decode("utf-8")
file = open('s.txt','w')
file.write(r)

Я не включаю определение ns, schemaLocation и другие переменные, так как не вижу их релевантными в контексте вопросов , Приведенный выше код генерирует файл, содержащий только данные тега Circular, т.е. DBS.No.FBC.BC.34/13.12.001/99-2000 dt April 6, 2000. Однако я хочу, чтобы весь XML был сгенерирован следующим образом:

<link:linkbase xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:in-ghi-rep-par="http://www.ghi.org/in-ghi-rep-par" xmlns:ref="http://www.xbrl.org/2006/ref" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.xbrl.org/2006/ref http://www.xbrl.org/2006/ref-2006-02-27.xsd http://www.ghi.org/in-ghi-rep-par &#10;../core/in-ghi-rep-par.xsd http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd">
  <link:referenceLink xlink:type="extended" xlink:role="http://www.xbrl.org/2003/role/link">
    <link:loc xlink:type="locator" xlink:href="../core/in-ghi-rep.xsd#in-ghi-rep_ReportingPeriodTable" xlink:label="in-ghi-rep_ReportingPeriodTable"/>
    <link:reference xlink:type="resource" xlink:label="res_1" xlink:role="http://www.xbrl.org/2003/role/disclosureRef" xlink:id="res_1">
      <in-ghi-rep-par:Circular>DBS.No.FBC.BC.34/13.12.001/99-2000  dt April 6, 2000</in-ghi-rep-par:Circular>
    </link:reference>
  </link:referenceLink>
</link:linkbase>

Приведенный выше текст генерируется, но когда я пишу в файл, он просто записывает тег Circular. Я не могу найти то, что я делаю здесь неправильно. Любая помощь?

1 Ответ

0 голосов
/ 30 марта 2020

На основании документов tree.write() - это то, что вы хотите. В вашем случае, я думаю, root.write("s.txt", encoding="utf-8") должно подойти (я не проверял).

...