拥有一个包含2个值的Python字典可以找到在定义的标签中没有值的XML元素

时间:2017-06-02 03:12:39

标签: python xml dictionary

我有一个dictonary的值,如:

{'el salto': ['durango'], 'durango': ['durango', 'urbana'], 'jimenez': ['chihuahua'], 'gomez palacio': ['durango', 'urbana'], 'chihuahua': ['chihuahua', 'urbana'], 'santiago papasquiaro': ['durango'], 'lerdo': ['durango'], 'matamoros': ['coahuila'], 'nuevo ideal': ['durango'], 'canatlan': ['durango'], 'hidalgo del parral': ['chihuahua', 'urbana'], 'torreon': ['coahuila'], 'cuauhtemoc': ['chihuahua', 'urbana'], 'delicias': ['chihuahua', 'urbana', 'chihuahua'], 'villa union': ['durango'], 'vicente guerrero': ['durango'], 'meoqui': ['chihuahua'], 'guadalupe victoria': ['durango'], 'saucillo': ['chihuahua'], 'nuevo casas grandes': ['chihuahua', 'urbana'], 'camargo': ['chihuahua'], 'nombre de dios': ['durango'], 'juarez': ['chihuahua', 'urbana'], 'francisco i. madero': ['durango'], 'san pedro': ['coahuila']}

(有些人有“urbana”,有些人没有)

我需要过滤key在元素的标签“d_ciudad”中的结果,然后检查字典键是否与元素中的标签“d_estado”具有相同的值,并且如果'urbana'在键中定义字典,也由此过滤,我正在尝试以下代码:

from xml.etree.ElementTree import ElementTree
import csv

tree = ElementTree()
my_dict = dict()

# Test input
tree.parse("sample_in.xml")
with open('file1.csv', 'rb') as csv_file:
    reader = csv.reader(csv_file)
    my_dict = dict(reader)

for node in tree.findall('.//data'):
    # Remove node if the name attribute value is not in inputID
    if not node.attrib.get('d_ciudad').lower() in my_dict:
        tree.getroot().remove(node)
    else:
        if not node.attrib.get('d_estado').lower() in my_dict[node.attrib.get('d_ciudad')]:
            tree.getroot().remove(node)
        else:
            if 'urbana' in my_dict[node.attrib.get('d_ciudad').lower()]:
                if node.attrib.get('d_zona').lower() != 'Urbano':
                    tree.getroot().remove(node)


# Do what you want with the modified xml
tree.write('sample_out.xml')

我收到的文件比它更大,并且有很多ns0:在里面。 XML就像:

INPUT

<NewDataSet><xsd:schema targetNamespace="NewDataSet" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified"><xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"/><xsd:element name="table"><xsd:complexType><xsd:sequence><xsd:element name="d_codigo" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="5"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="d_asenta" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="60"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="d_tipo_asenta" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="40"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="D_mnpio" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="50"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="d_estado" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="35"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="d_ciudad" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="50"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="d_CP" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="5"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="c_estado" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="2"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="c_oficina" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="5"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="c_CP" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="5"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="c_tipo_asenta" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="2"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="c_mnpio" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="3"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="id_asenta_cpcons" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="4"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="d_zona" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="40"/></xsd:restriction></xsd:simpleType></xsd:element><xsd:element name="c_cve_ciudad" minOccurs="0"><xsd:simpleType><xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="3082" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xsd:maxLength value="2"/></xsd:restriction></xsd:simpleType></xsd:element></xsd:sequence></xsd:complexType></xsd:element></xsd:schema><table xmlns="NewDataSet"><d_codigo>01000</d_codigo><d_asenta>San Ángel</d_asenta><d_tipo_asenta>Colonia</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>09</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0001</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01010</d_codigo><d_asenta>Los Alpes</d_asenta><d_tipo_asenta>Colonia</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>09</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0005</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01020</d_codigo><d_asenta>Guadalupe Inn</d_asenta><d_tipo_asenta>Colonia</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>09</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0006</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01030</d_codigo><d_asenta>Florida</d_asenta><d_tipo_asenta>Colonia</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>09</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0010</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01030</d_codigo><d_asenta>Axotla</d_asenta><d_tipo_asenta>Pueblo</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>28</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0009</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01040</d_codigo><d_asenta>Campestre</d_asenta><d_tipo_asenta>Colonia</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>09</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0012</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01048</d_codigo><d_asenta>Las Águilas</d_asenta><d_tipo_asenta>Unidad habitacional</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>31</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0013</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01049</d_codigo><d_asenta>Tlacopac</d_asenta><d_tipo_asenta>Pueblo</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>28</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0014</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01050</d_codigo><d_asenta>Ex-Hacienda de Guadalupe Chimalistac</d_asenta><d_tipo_asenta>Colonia</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>09</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0016</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table><table xmlns="NewDataSet"><d_codigo>01060</d_codigo><d_asenta>San Ángel Inn</d_asenta><d_tipo_asenta>Colonia</d_tipo_asenta><D_mnpio>Álvaro Obregón</D_mnpio><d_estado>Ciudad de México</d_estado><d_ciudad>Ciudad de México</d_ciudad><d_CP>01001</d_CP><c_estado>09</c_estado><c_oficina>01001</c_oficina><c_CP></c_CP><c_tipo_asenta>09</c_tipo_asenta><c_mnpio>010</c_mnpio><id_asenta_cpcons>0018</id_asenta_cpcons><d_zona>Urbano</d_zona><c_cve_ciudad>01</c_cve_ciudad></table>

输出:

<NewDataSet xmlns:ns1="http://schemas.microsoft.com/sqlserver/2004/sqltypes" xmlns:ns2="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:schema elementFormDefault="qualified" targetNamespace="NewDataSet"><xs:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" /><xs:element name="table"><xs:complexType><xs:sequence><xs:element minOccurs="0" name="d_codigo"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="5" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="d_asenta"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="60" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="d_tipo_asenta"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="40" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="D_mnpio"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="50" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="d_estado"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="35" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="d_ciudad"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="50" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="d_CP"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="5" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="c_estado"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="2" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="c_oficina"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="5" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="c_CP"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="5" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="c_tipo_asenta"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="2" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="c_mnpio"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="3" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="id_asenta_cpcons"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="4" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="d_zona"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="40" /></xs:restriction></xs:simpleType></xs:element><xs:element minOccurs="0" name="c_cve_ciudad"><xs:simpleType><xs:restriction base="sqltypes:nvarchar" ns1:localeId="3082" ns1:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"><xs:maxLength value="2" /></xs:restriction></xs:simpleType></xs:element></xs:sequence></xs:complexType></xs:element></xs:schema><ns2:table><ns2:d_codigo>01000</ns2:d_codigo><ns2:d_asenta>San &#193;ngel</ns2:d_asenta><ns2:d_tipo_asenta>Colonia</ns2:d_tipo_asenta><ns2:D_mnpio>&#193;lvaro Obreg&#243;n</ns2:D_mnpio><ns2:d_estado>Ciudad de M&#233;xico</ns2:d_estado><ns2:d_ciudad>Ciudad de M&#233;xico</ns2:d_ciudad><ns2:d_CP>01001</ns2:d_CP><ns2:c_estado>09</ns2:c_estado><ns2:c_oficina>01001</ns2:c_oficina><ns2:c_CP /><ns2:c_tipo_asenta>09</ns2:c_tipo_asenta><ns2:c_mnpio>010</ns2:c_mnpio><ns2:id_asenta_cpcons>0001</ns2:id_asenta_cpcons><ns2:d_zona>Urbano</ns2:d_zona><ns2:c_cve_ciudad>01</ns2:c_cve_ciudad></ns2:table><ns2:table><ns2:d_codigo>01010</ns2:d_codigo><ns2:d_asenta>Los Alpes</ns2:d_asenta><ns2:d_tipo_asenta>Colonia</ns2:d_tipo_asenta><ns2:D_mnpio>&#193;lvaro Obreg&#243;n</ns2:D_mnpio><ns2:d_estado>Ciudad de M&#233;xico</ns2:d_estado><ns2:d_ciudad>Ciudad de M&#233;xico</ns2:d_ciudad><ns2:d_CP>01001</ns2:d_CP><ns2:c_estado>09</ns2:c_estado><ns2:c_oficina>01001</ns2:c_oficina><ns2:c_CP /><ns2:c_tipo_asenta>09</ns2:c_tipo_asenta><ns2:c_mnpio>010</ns2:c_mnpio><ns2:id_asenta_cpcons>0005</ns2:id_asenta_cpcons><ns2:d_zona>Urbano</ns2:d_zona><ns2:c_cve_ciudad>01</ns2:c_cve_ciudad></ns2:table><ns2:table><ns2:d_codigo>01020</ns2:d_codigo><ns2:d_asenta>Guadalupe Inn</ns2:d_asenta><ns2:d_tipo_asenta>Colonia</ns2:d_tipo_asenta><ns2:D_mnpio>&#193;lvaro Obreg&#243;n</ns2:D_mnpio><ns2:d_estado>Ciudad de M&#233;xico</ns2:d_estado><ns2:d_ciudad>Ciudad de M&#233;xico</ns2:d_ciudad><ns2:d_CP>01001</ns2:d_CP><ns2:c_estado>09</ns2:c_estado><ns2:c_oficina>01001</ns2:c_oficina><ns2:c_CP /><ns2:c_tipo_asenta>09</ns2:c_tipo_asenta><ns2:c_mnpio>010</ns2:c_mnpio><ns2:id_asenta_cpcons>0006</ns2:id_asenta_cpcons><ns2:d_zona>Urbano</ns2:d_zona><ns2:c_cve_ciudad>01</ns2:c_cve_ciudad></ns2:table>

1 个答案:

答案 0 :(得分:0)

看起来你对XML术语有点困惑。我建议您阅读the relevant section of the Wikipedia article on XML以了解一些基础知识。基本上,有元素(例如<table>),属性(例如ns1:localeId="3082")和名称空间,它们是元素和属性的有效前缀。此外,元素可以嵌套在其他元素中,然后您可以说某些元素有子元素或其他元素有父元素。

在您的情况下,看起来您对代码有正确的想法,除非您混淆了一些术语(以及可能如何在Python中使用XML API)。以下是您的代码的略微修改版本:

# Initialize my_dict just like you were doing up here.
tree.parse("sample_in.xml")

for table in tree.findall('.//{NewDataSet}table'):
    # If any of the checks fail, delete the whole table element.
    ciudad = table.find('./{NewDataSet}d_ciudad').text.lower().strip()
    if ciudad not in my_dict:
        print('ciudad: %s' % ciudad)
        tree.getroot().remove(table)
        continue

    estado = table.find('./{NewDataSet}d_estado').text.lower().strip()
    print('test: %s' % estado)
    if estado not in my_dict[ciudad]:
        print('estado: %s' % estado)
        tree.getroot().remove(table)
        continue

    if 'urbana' in my_dict[ciudad]:
        zona = table.find('./{NewDataSet}d_zona').text.lower().strip()
        if zona != 'urbano':
            print('zona: %s' % zona)
            tree.getroot().remove(table)
            continue

# Do what you want with the modified xml
tree.write('sample_out.xml')

您可能只对修改后的findfindall来电感兴趣。取basic XPath expressions并返回第一个节点或匹配的所有节点。值得注意的是,{NewDataSet}部分指定了命名空间,后面的工作是(在这种情况下)元素的名称。

我还在结构上改变了一些代码,因此你的if语句不那么嵌套,但这纯粹是装饰性的。