Python XML 建筑
Python XML building
我正在尝试从 python 构建一个 xml,如何在子元素中循环?
我一直在尝试以所需的格式获取它,但无法弄清楚如何
我得到的输出是这样的:
b'<member x0="28.921" y0="710.377" text="1. Case gdfh "><sub/></member>'
b'<member><sub x0="54.721" y0="695.792" text="Version "> 0</sub></member>'
b'<member><sub x0="54.721" y0="688.112" text="AER Number "> 4735986</sub></member>'
b'<member><sub x0="54.721" y0="680.792" text="Initial Unit "> SBFBKJSF</sub></member>'
b'<member x0="28.921" y0="561.937" text="2. Patient"><sub/></member>'
b'<member><sub x0="54.721" y0="510.697" text="Patient Information"></sub></member>'
b'<member><sub x0="54.721" y0="496.112" text="Age "> 60 Years</sub></member>'
b'<member><sub x0="54.721" y0="488.432" text="Height "> 171 Centimeter</sub></member>'
我想要的输出是这样的:
b'
<member x0="28.921" y0="710.377" text="1. Case gdfh ">
<sub x0="54.721" y0="695.792" text="Version "> 0</sub>
<sub x0="54.721" y0="688.112" text="AER Number "> 4735986</sub>
<sub x0="54.721" y0="680.792" text="Initial Unit "> SBFBKJSF</sub>
</member>
<member x0="28.921" y0="561.937" text="2. Patient">
<sub x0="54.721" y0="510.697" text="Patient Information"></sub>
<sub x0="54.721" y0="496.112" text="Age "> 60 Years</sub>
<sub x0="54.721" y0="488.432" text="Height "> 171 Centimeter</sub>
</member>
'
我写的代码是这样的:
这里,'st'是对象列表
from lxml import etree
import xml.etree.ElementTree as xml
root = etree.Element('root')
for j in st:
member = etree.SubElement(root, 'member')
submbr = etree.SubElement(member, 'sub')
if j.x0 == '28.921':
root.append(member)
member.append(submbr)
member.attrib['x0'] = j.x0
member.attrib['y0'] = j.y0
member.attrib['text'] = j.text[0]
member.text = j.text[1]
else:
submbr.attrib['x0'] = j.x0
submbr.attrib['y0'] = j.y0
submbr.attrib['text'] = j.text[0]
submbr.text = j.text[1]
out = etree.tostring(member)
print(out)
数据结构,循环时的 st 列表具有这些值
TEXT x0 y0
['1. Case gdfh ', ''] 28.921 , 710.377
['Version ', ' 0', ''] 54.721 , 695.792
['AER Number ', ' 4735986', ''] 54.721 , 688.112
['Initial Unit ', 'SBFBKJSF ', ''] 54.721 , 680.792
['2. Patient', ''] 28.921 , 561.937
['Patient Information', ''] 54.721 , 510.697
['Age ', ' 60 Years', ''] 54.721 , 496.112
['Height ', ' 171 Centimeter', ''] 54.721 , 488.432
每当 x0
的值等于 '28.921'
时,您都需要一个新的 member
,并且在任何其他情况下,您想要向任何 [=22] 添加一个子成员=]current member
是 - 除非没有当前成员,当 st
中的第一项不是 x0 == '28.921'
.
时可能会发生这种情况
from lxml import etree
class betterdict(dict):
def __getattr__(self, key):
return self.get(key)
st = [
betterdict({'text': ['1. Case gdfh ', ''], 'x0': '28.921', 'y0': '710.377'}),
betterdict({'text': ['Version ', ' 0', ''], 'x0': '54.721', 'y0': '695.792'}),
betterdict({'text': ['AER Number ', ' 4735986', ''], 'x0': '54.721', 'y0': '688.112'}),
betterdict({'text': ['Initial Unit ', 'SBFBKJSF ', ''], 'x0': '54.721', 'y0': '680.792'}),
betterdict({'text': ['2. Patient', ''], 'x0': '28.921', 'y0': '561.937'}),
betterdict({'text': ['Patient Information', ''], 'x0': '54.721', 'y0': '510.697'}),
betterdict({'text': ['Age ', ' 60 Years', ''], 'x0': '54.721', 'y0': '496.112'}),
betterdict({'text': ['Height ', ' 171 Centimeter', ''], 'x0': '54.721', 'y0': '488.432'}),
]
root = etree.Element('root')
member = None
for j in st:
if j.x0 == '28.921':
member = etree.SubElement(root, 'member')
member.attrib['x0'] = j.x0
member.attrib['y0'] = j.y0
member.attrib['text'] = j.text[0]
elif member is not None:
submbr = etree.SubElement(member, 'sub')
submbr.attrib['x0'] = j.x0
submbr.attrib['y0'] = j.y0
submbr.attrib['text'] = j.text[0]
submbr.text = j.text[1]
out = etree.tostring(root)
print(out)
准确打印您想要的内容(为了便于阅读而格式化)
<root>
<member x0="28.921" y0="710.377" text="1. Case gdfh ">
<sub x0="54.721" y0="695.792" text="Version "> 0</sub>
<sub x0="54.721" y0="688.112" text="AER Number "> 4735986</sub>
<sub x0="54.721" y0="680.792" text="Initial Unit ">SBFBKJSF </sub>
</member>
<member x0="28.921" y0="561.937" text="2. Patient">
<sub x0="54.721" y0="510.697" text="Patient Information"></sub>
<sub x0="54.721" y0="496.112" text="Age "> 60 Years</sub>
<sub x0="54.721" y0="488.432" text="Height "> 171 Centimeter</sub>
</member>
</root>
我正在尝试从 python 构建一个 xml,如何在子元素中循环? 我一直在尝试以所需的格式获取它,但无法弄清楚如何
我得到的输出是这样的:
b'<member x0="28.921" y0="710.377" text="1. Case gdfh "><sub/></member>'
b'<member><sub x0="54.721" y0="695.792" text="Version "> 0</sub></member>'
b'<member><sub x0="54.721" y0="688.112" text="AER Number "> 4735986</sub></member>'
b'<member><sub x0="54.721" y0="680.792" text="Initial Unit "> SBFBKJSF</sub></member>'
b'<member x0="28.921" y0="561.937" text="2. Patient"><sub/></member>'
b'<member><sub x0="54.721" y0="510.697" text="Patient Information"></sub></member>'
b'<member><sub x0="54.721" y0="496.112" text="Age "> 60 Years</sub></member>'
b'<member><sub x0="54.721" y0="488.432" text="Height "> 171 Centimeter</sub></member>'
我想要的输出是这样的:
b'
<member x0="28.921" y0="710.377" text="1. Case gdfh ">
<sub x0="54.721" y0="695.792" text="Version "> 0</sub>
<sub x0="54.721" y0="688.112" text="AER Number "> 4735986</sub>
<sub x0="54.721" y0="680.792" text="Initial Unit "> SBFBKJSF</sub>
</member>
<member x0="28.921" y0="561.937" text="2. Patient">
<sub x0="54.721" y0="510.697" text="Patient Information"></sub>
<sub x0="54.721" y0="496.112" text="Age "> 60 Years</sub>
<sub x0="54.721" y0="488.432" text="Height "> 171 Centimeter</sub>
</member>
'
我写的代码是这样的:
这里,'st'是对象列表
from lxml import etree
import xml.etree.ElementTree as xml
root = etree.Element('root')
for j in st:
member = etree.SubElement(root, 'member')
submbr = etree.SubElement(member, 'sub')
if j.x0 == '28.921':
root.append(member)
member.append(submbr)
member.attrib['x0'] = j.x0
member.attrib['y0'] = j.y0
member.attrib['text'] = j.text[0]
member.text = j.text[1]
else:
submbr.attrib['x0'] = j.x0
submbr.attrib['y0'] = j.y0
submbr.attrib['text'] = j.text[0]
submbr.text = j.text[1]
out = etree.tostring(member)
print(out)
数据结构,循环时的 st 列表具有这些值
TEXT x0 y0
['1. Case gdfh ', ''] 28.921 , 710.377
['Version ', ' 0', ''] 54.721 , 695.792
['AER Number ', ' 4735986', ''] 54.721 , 688.112
['Initial Unit ', 'SBFBKJSF ', ''] 54.721 , 680.792
['2. Patient', ''] 28.921 , 561.937
['Patient Information', ''] 54.721 , 510.697
['Age ', ' 60 Years', ''] 54.721 , 496.112
['Height ', ' 171 Centimeter', ''] 54.721 , 488.432
每当 x0
的值等于 '28.921'
时,您都需要一个新的 member
,并且在任何其他情况下,您想要向任何 [=22] 添加一个子成员=]current member
是 - 除非没有当前成员,当 st
中的第一项不是 x0 == '28.921'
.
from lxml import etree
class betterdict(dict):
def __getattr__(self, key):
return self.get(key)
st = [
betterdict({'text': ['1. Case gdfh ', ''], 'x0': '28.921', 'y0': '710.377'}),
betterdict({'text': ['Version ', ' 0', ''], 'x0': '54.721', 'y0': '695.792'}),
betterdict({'text': ['AER Number ', ' 4735986', ''], 'x0': '54.721', 'y0': '688.112'}),
betterdict({'text': ['Initial Unit ', 'SBFBKJSF ', ''], 'x0': '54.721', 'y0': '680.792'}),
betterdict({'text': ['2. Patient', ''], 'x0': '28.921', 'y0': '561.937'}),
betterdict({'text': ['Patient Information', ''], 'x0': '54.721', 'y0': '510.697'}),
betterdict({'text': ['Age ', ' 60 Years', ''], 'x0': '54.721', 'y0': '496.112'}),
betterdict({'text': ['Height ', ' 171 Centimeter', ''], 'x0': '54.721', 'y0': '488.432'}),
]
root = etree.Element('root')
member = None
for j in st:
if j.x0 == '28.921':
member = etree.SubElement(root, 'member')
member.attrib['x0'] = j.x0
member.attrib['y0'] = j.y0
member.attrib['text'] = j.text[0]
elif member is not None:
submbr = etree.SubElement(member, 'sub')
submbr.attrib['x0'] = j.x0
submbr.attrib['y0'] = j.y0
submbr.attrib['text'] = j.text[0]
submbr.text = j.text[1]
out = etree.tostring(root)
print(out)
准确打印您想要的内容(为了便于阅读而格式化)
<root>
<member x0="28.921" y0="710.377" text="1. Case gdfh ">
<sub x0="54.721" y0="695.792" text="Version "> 0</sub>
<sub x0="54.721" y0="688.112" text="AER Number "> 4735986</sub>
<sub x0="54.721" y0="680.792" text="Initial Unit ">SBFBKJSF </sub>
</member>
<member x0="28.921" y0="561.937" text="2. Patient">
<sub x0="54.721" y0="510.697" text="Patient Information"></sub>
<sub x0="54.721" y0="496.112" text="Age "> 60 Years</sub>
<sub x0="54.721" y0="488.432" text="Height "> 171 Centimeter</sub>
</member>
</root>