2017-06-02 9 views
1

定義されたタグでない値を持っていないXML要素を見つける:いくつかはそれで「アーバナ」を持っている(は、私のような値を持つ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']} 

を、いくつかの」doesnのt)

要素のタグ "d_ciudad"にkeyが含まれている場所で結果をフィルタリングし、要素のタグ "d_estado"と同じ値が辞書のキーに含まれているかどうかを確認する必要があります。辞書のキーもこれでフィルタリングし、次のコードを試しています:

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> 

OUTPUT:

<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> 
+0

「sample_in.xml」と「sample_out.xml」の内容を投稿してください(質問の最後にあるXMLが入力か出力かわかりません)。また、あなたが期待している出力も含めてください。 – supersam654

+0

それに気づいてくれてありがとう、私はすでに答えを編集しました。出力は、my_dictにないバリューが削除されたフィルタリングされたXMLである必要があります –

+0

'd_ciudad'の値が間違っている場合などは' d_ciudad'要素を削除するか、 'table'全体を削除しますか?それを含む要素? – supersam654

答えて

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ステートメントのネストが少なくなっていますが、これは純粋に化粧です。

+0

あなたの説明と修正をありがとう、コードが動作するようだが、私はこのエラーを取得する瞬間が来る: 'トレースバック(最新のコール最後): ファイル" /ユーザー/ toString/PycharmProjects/codigos_postales/main2.py "、行14、 ciudad = table.find( './ {NewDataSet} d_ciudad')。text.lower()。strip()AttributeError: 'NoneType'オブジェクトにはno属性 'text'' このエラーを追跡する方法と、スキップできる場合にスキップするにはどうすればいいですか –

+0

つまり、テーブルの1つに 'd_ciudad'子要素がありません。それらのテーブルを削除するか、そのテーブルだけを残して次のテーブルに移動しますか? – supersam654

関連する問題