获取父节点?

时间:2018-01-05 13:42:53

标签: python python-3.x lxml

我编写了一个脚本,用于通过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()来获取父节点,但这给了我一个错误。怎么抓住它?

1 个答案:

答案 0 :(得分:1)

obj.getparent() is t,因此您实际上不需要致电getparent(),只需删除整个对象:

node.remove(t)

或者,如果您要删除整个wfs:Transaction

node.getparent().remove(node)