如何使用Python区分XML中同名的不同标签
How to distinguish different tags with the same name in XML by using Python
我想从一个 xml 文件中提取特定元素。但是 xml 中有很多相同的标签。如果我们有以下 xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns="SimpleClass">
<Class name="AcademicInstitution" is_persistent="false">
<attrs name="name" is_primary="true" type="/11"/>
</Class>
<Class name="Company" is_persistent="false" parent="/9">
<attrs name="manager" is_primary="false" type="/3"/>
</Class>
<Class name="Faculty" is_persistent="false" parent="/0">
<attrs name="address" is_primary="false" type="/7"/>
<attrs name="dean" is_primary="false" type="/3"/>
</Class>
<Class name="Person" is_persistent="true">
<attrs name="name" is_primary="true" type="/11"/>
<attrs name="works_for" is_primary="false" type="/9"/>
</Class>
<Class name="Document" is_persistent="true">
<attrs name="number" is_primary="true" type="/10"/>
<attrs name="author" is_primary="false" type="/3"/>
<attrs name="content" is_primary="false" type="/11"/>
</Class>
<Class name="Student" is_persistent="false" parent="/3">
<attrs name="studiesIn" is_primary="false" type="/6"/>
<attrs name="supervisor" is_primary="false" type="/3"/>
</Class>
<Class name="University" is_persistent="false" parent="/9">
<attrs name="faculty" is_primary="false" type="/2"/>
</Class>
<Class name="Address" is_persistent="false">
<attrs name="city" is_primary="false" type="/11"/>
<attrs name="street" is_primary="false" type="/11"/>
<attrs name="postcode" is_primary="false" type="/11"/>
</Class>
<Class name="Task" is_persistent="true">
<attrs name="name" is_primary="true" type="/11"/>
<attrs name="number" is_primary="true" type="/10"/>
<attrs name="description" is_primary="false" type="/4"/>
</Class>
<Class name="Organization" is_persistent="true">
<attrs name="name" is_primary="true" type="/11"/>
<attrs name="address" is_primary="false" type="/7"/>
</Class>
<PrimitiveDataType name="Integer"/>
<PrimitiveDataType name="String"/>
<Association name="address" src="/3" dest="/7"/>
<Association name="performsTask" src="/3" dest="/8"/>
</xmi:XMI>
我们可以发现有很多'Class'个标签和'attrs'个标签。
我可以通过下面的代码获取标签
import xml.etree.ElementTree as ET
tree = ET.parse('test2.xmi')
root = tree.getroot()
for ele in tree.getiterator():
_, _, tag = ele.tag.rpartition('}')
输出是:
XMI
Class
attrs
Class
attrs
Class
attrs
attrs
...
我想要的输出是:
Class(Class0)
attrs(Class0)
Class(Class1)
attrs(Class1)
Class(Class2)
attrs(Class2)
attrs(Class2)
...
我的想法是使用 Python ElementTree 来解析 xml 文件并获取标签。但是我不知道如何为每个标签分配一个唯一的标签(例如:'Tag'+number)。还有,如何让每个子节点都得到父节点的唯一标签(Class(Class0) and attrs(Class0)
)?
我想我已经做到了:
import xml.etree.ElementTree as ET
tree = ET.parse('test2.xmi')
root = tree.getroot()
for i in range(0,len(root)):
_, _, roottag = root[i].tag.rpartition('}')
for ele in root[i].getiterator():
_, _, tag = ele.tag.rpartition('}')
print str(tag)+"("+str(roottag)+str(i)+")"
如果有人有更好的想法,我很高兴听到!
我想从一个 xml 文件中提取特定元素。但是 xml 中有很多相同的标签。如果我们有以下 xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns="SimpleClass">
<Class name="AcademicInstitution" is_persistent="false">
<attrs name="name" is_primary="true" type="/11"/>
</Class>
<Class name="Company" is_persistent="false" parent="/9">
<attrs name="manager" is_primary="false" type="/3"/>
</Class>
<Class name="Faculty" is_persistent="false" parent="/0">
<attrs name="address" is_primary="false" type="/7"/>
<attrs name="dean" is_primary="false" type="/3"/>
</Class>
<Class name="Person" is_persistent="true">
<attrs name="name" is_primary="true" type="/11"/>
<attrs name="works_for" is_primary="false" type="/9"/>
</Class>
<Class name="Document" is_persistent="true">
<attrs name="number" is_primary="true" type="/10"/>
<attrs name="author" is_primary="false" type="/3"/>
<attrs name="content" is_primary="false" type="/11"/>
</Class>
<Class name="Student" is_persistent="false" parent="/3">
<attrs name="studiesIn" is_primary="false" type="/6"/>
<attrs name="supervisor" is_primary="false" type="/3"/>
</Class>
<Class name="University" is_persistent="false" parent="/9">
<attrs name="faculty" is_primary="false" type="/2"/>
</Class>
<Class name="Address" is_persistent="false">
<attrs name="city" is_primary="false" type="/11"/>
<attrs name="street" is_primary="false" type="/11"/>
<attrs name="postcode" is_primary="false" type="/11"/>
</Class>
<Class name="Task" is_persistent="true">
<attrs name="name" is_primary="true" type="/11"/>
<attrs name="number" is_primary="true" type="/10"/>
<attrs name="description" is_primary="false" type="/4"/>
</Class>
<Class name="Organization" is_persistent="true">
<attrs name="name" is_primary="true" type="/11"/>
<attrs name="address" is_primary="false" type="/7"/>
</Class>
<PrimitiveDataType name="Integer"/>
<PrimitiveDataType name="String"/>
<Association name="address" src="/3" dest="/7"/>
<Association name="performsTask" src="/3" dest="/8"/>
</xmi:XMI>
我们可以发现有很多'Class'个标签和'attrs'个标签。
我可以通过下面的代码获取标签
import xml.etree.ElementTree as ET
tree = ET.parse('test2.xmi')
root = tree.getroot()
for ele in tree.getiterator():
_, _, tag = ele.tag.rpartition('}')
输出是:
XMI
Class
attrs
Class
attrs
Class
attrs
attrs
...
我想要的输出是:
Class(Class0)
attrs(Class0)
Class(Class1)
attrs(Class1)
Class(Class2)
attrs(Class2)
attrs(Class2)
...
我的想法是使用 Python ElementTree 来解析 xml 文件并获取标签。但是我不知道如何为每个标签分配一个唯一的标签(例如:'Tag'+number)。还有,如何让每个子节点都得到父节点的唯一标签(Class(Class0) and attrs(Class0)
)?
我想我已经做到了:
import xml.etree.ElementTree as ET
tree = ET.parse('test2.xmi')
root = tree.getroot()
for i in range(0,len(root)):
_, _, roottag = root[i].tag.rpartition('}')
for ele in root[i].getiterator():
_, _, tag = ele.tag.rpartition('}')
print str(tag)+"("+str(roottag)+str(i)+")"
如果有人有更好的想法,我很高兴听到!