python中的xml元素属性到列表中
我有一个类似xml的列表,我的目标是将每个对位的X和Y放在一个列表中。如何在python中实现这一点?先谢谢你python中的xml元素属性到列表中,python,xml,Python,Xml,我有一个类似xml的列表,我的目标是将每个对位的X和Y放在一个列表中。如何在python中实现这一点?先谢谢你 <Assembly> <Part ASSEMBLY_POS="A12G3" PART_ID="2612666" PART_POS="Y366" MATERIAL="SN490B" PROFILE="PL12"> <ContourPoint X="19700.001848" Y="21760.00407" Z="37863">
<Assembly>
<Part ASSEMBLY_POS="A12G3" PART_ID="2612666" PART_POS="Y366" MATERIAL="SN490B" PROFILE="PL12">
<ContourPoint X="19700.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19700.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ROUNDING" X="15" Y="0" />
</ContourPoint>
</Part>
</Assembly>
结帐
第一个近似值可以是:
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
# Or from a variable
# root = ET.fromstring(data_as_string)
part = root.getchildren()[0]
points = []
for child in part:
points.append((float(child.attrib['X']), float(child.attrib['Y'])))
print(points)
资料来源:
警告xml.etree.ElementTree模块对恶意构造的数据不安全。如果需要解析不受信任或未经身份验证的数据,请参阅XML漏洞。这里有一种使用sax解析的替代方法,对于此类数据可能更简单一些
data = """<?xml version="1.0"?>
<Assembly>
<Part ASSEMBLY_POS="A12G3" PART_ID="2612666" PART_POS="Y366" MATERIAL="SN490B" PROFILE="PL12">
<ContourPoint X="19700.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19700.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ROUNDING" X="15" Y="0" />
</ContourPoint>
</Part>
</Assembly>
"""
import xml.sax
class AssemblyHandler(xml.sax.ContentHandler):
def startElement(self, name, attrs):
if name == "Part":
print("PART")
elif name == "ContourPoint":
print(attrs.get('X'), attrs.get('Y'))
xml.sax.parseString(data, AssemblyHandler())
data=”“”
"""
导入xml.sax
类AssemblyHandler(xml.sax.ContentHandler):
def startElement(自身、名称、属性):
如果名称==“零件”:
打印(“部分”)
elif名称==“轮廓点”:
打印(attrs.get('X')、attrs.get('Y'))
parseString(数据,AssemblyHandler())
找到具有各自标记名的所有标记(在本例中为属性“X”和“Y”),并使用列表理解迭代结果,以将属性值添加到列表中
data='''<Assembly>
<Part ASSEMBLY_POS="A12G3" PART_ID="2612666" PART_POS="Y366" MATERIAL="SN490B" PROFILE="PL12">
<ContourPoint X="19700.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19700.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ROUNDING" X="15" Y="0" />
</ContourPoint>
</Part>
</Assembly>'''
import xml.etree.ElementTree as ET
root = ET.fromstring(data)
points = root.findall('.//ContourPoint')
print [(each.attrib['X'],each.attrib['Y']) for each in points]
谢谢你,它做的很好。
data='''<Assembly>
<Part ASSEMBLY_POS="A12G3" PART_ID="2612666" PART_POS="Y366" MATERIAL="SN490B" PROFILE="PL12">
<ContourPoint X="19700.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19700.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="38213">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="20018.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ARC" X="35" Y="35" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37507">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_NONE" X="0" Y="0" />
</ContourPoint>
<ContourPoint X="19820.001848" Y="21760.00407" Z="37863">
<Chamfer DZ1="0" DZ2="0" TYPE="CHAMFER_ROUNDING" X="15" Y="0" />
</ContourPoint>
</Part>
</Assembly>'''
import xml.etree.ElementTree as ET
root = ET.fromstring(data)
points = root.findall('.//ContourPoint')
print [(each.attrib['X'],each.attrib['Y']) for each in points]
[('19700.001848', '21760.00407'), ('19700.001848', '21760.00407'), ('20018.001848', '21760.00407'), ('20018.001848', '21760.00407'), ('19820.001848', '21760.00407'), ('19820.001848', '21760.00407')]