我正在使用minidom解析xml。我想要实现的是找到所有具有特定属性的标记,然后在其下面附加一个具有不同属性值的新标记。例如
假设标签是:
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntDataRegion" VALUE="XYZ"/>
我找到了所有具有属性值NAME = "EntReg"
的标记。现在我想在它下面附加一个标签。你知道吗
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntRoutingDataSelected" VALUE="yes"/>
标记名和值将是静态的,即我希望在PROPVAL
属性NAME
具有值EntDataRegion
的地方附加相同的标记。你知道吗
到目前为止,我已经写了这篇文章并找到了所有PROPVAL
标记:
xmldoc = minidom.parse('test.xml')
prop_val = xmldoc.getElementsByTagName('PROPVAL')
for i in prop_val:
if i.attributes['NAME'].value == 'PB:EntDataRegion':
print(i.attributes['VALUE'].value)
编辑
XML结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<MOD version="3">
<CLASS>
<CLASS COMMENT="" DEFAULTPRIORITY="50">
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntDataRegion" VALUE="XYZ"/>
<RULE LOCALIZABLE="false"/>
<ITEM>
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="HIDE" VALUE="XYZ"/>
</ITEM>
</CLASS>
<CLASS COMMENT="" DEFAULTPRIORITY="50">
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntDataRegion" VALUE="XYZ"/>
<RULE LOCALIZABLE="false"/>
<ITEM>
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="HIDE" VALUE="XYZ"/>
</ITEM>
</CLASS>
</CLASS>
<CLASS>
<ITEM>
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntDataRegion" VALUE="XYZ"/>
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntRoutingDataSelected" VALUE="yes"/>
</ITEM>
</CLASS>
</MOD>
xml有两个标记CLASS
和<ITEM>
。class标记可以将item标记作为子标记。但在将item作为子标记之前,它总是有一堆<PROPVAL>
标记。你知道吗
我们的想法是插入
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntRoutingDataSelected" VALUE="yes"/>
之前
<PROPVAL ISFORMULA="N" LOCALIZABLE="false" NAME="EntDataRegion" VALUE="XYZ"/>
问题是我能插入上面的标签。具有item标记的class标记也具有此属性。而我只希望ITEM
标记具有这个属性,如果它们具有<PROPVAL NAME="EntDataRegion">
这就是我尝试过的:
from xml.dom import minidom
xmldoc = minidom.parse('test.xml')
prop_val = xmldoc.getElementsByTagName('PROPVAL')
class_xml = xmldoc.getElementsByTagName('CLASS')
item_xml = xmldoc.getElementsByTagName('ITEM')
newScript = xmldoc.createElement("PROPVAL")
newScript.setAttribute("ISFORMULA" , "N")
newScript.setAttribute("LOCALIZABLE", "false")
newScript.setAttribute("NAME", "EntRoutingDataSelected")
newScript.setAttribute("VALUE", "yes")
print(newScript.toxml())
for i in range(len(class_xml)):
item = class_xml[i]
item_chidren = item.childNodes
item.insertBefore(newScript, item_chidren[4])
with open('newtest.xml', 'w') as f:
xmldoc.writexml(f)
目前没有回答
相关问题 更多 >
编程相关推荐