我编写了一个脚本,用于通过id-prefix从大型数据集中删除不需要的对象。
这就是这些对象的结构:
<wfsext:Replace vendorId="AdV" safeToIgnore="false">
<AX_Anschrift gml:id="DENWAEDA0000001G20161222T083308Z">
<gml:identifier codeSpace="http://www.adv-online.de/">urn:adv:oid:DENWAEDA0000001G</gml:identifier>
...
</AX_Anschrift>
<ogc:Filter>
<ogc:FeatureId fid="DENWAEDA0000001G20161222T083308Z" />
</ogc:Filter>
</wfsext:Replace>
我想在<wfsext:Replace>...</wfsext:Replace>
我的脚本中有一段代码片段:
file = etree.parse(portion_file)
root = file.getroot()
nsmap = root.nsmap.copy()
nsmap['adv'] = nsmap.pop(None)
node = root.xpath(".//adv:geaenderteObjekte/wfs:Transaction", namespaces=nsmap)[0]
for t in node:
for obj in t:
objecttype = str(etree.QName(obj.tag).localname)
if objecttype == 'Filter':
pass
else:
objid = (obj.xpath('@gml:id', namespaces=nsmap))[0][:16]
if debug:
print('{} - {}'.format(objid[:16], objecttype))
if objid[:6] != prefix:
#parent = obj.getparent()
t.remove(obj)
t.remove(obj)
删除<AX_Anschrift>..</AX_Anschrift>
但不删除对象的其余部分。我尝试使用obj.getparent()
来获取父节点,但这给了我一个错误。怎么抓住它?
答案 0 :(得分:1)
obj.getparent() is t
,因此您实际上不需要致电getparent()
,只需删除整个对象:
node.remove(t)
或者,如果您要删除整个wfs:Transaction
,
node.getparent().remove(node)