SORU
13 ŞUBAT 2013, ÇARŞAMBA


'ElementTree' üzerinden Python ad ile XML ayrıştırma;

ElementTree Python kullanarak ayrıştırmak için aşağıdaki XML var:

<rdf:RDF xml:base="http://dbpedia.org/ontology/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns="http://dbpedia.org/ontology/">

    <owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague">
        <rdfs:label xml:lang="en">basketball league</rdfs:label>
        <rdfs:comment xml:lang="en">
          a group of sports teams that compete against each other
          in Basketball
        </rdfs:comment>
    </owl:Class>

</rdf:RDF>

owl:Class tüm etiketleri bulmak ve onları içinde rdfs:label tüm örneklerin değer elde etmek istiyorum. Aşağıdaki kodu kullanıyorum:

tree = ET.parse("filename")
root = tree.getroot()
root.findall('owl:Class')

Ad nedeniyle, aşağıdaki hatayı alıyorum.

SyntaxError: prefix 'owl' not found in prefix map

http://effbot.org/zone/element-namespaces.htm belgeyi okumaya çalıştım ama hala yukarıdaki XML birden fazla iç içe geçmiş bir ad olduğundan bu çalışma almak mümkün değilim.

Lütfen bana owl:Class tüm etiketleri bulmak için bu kodu değiştirmek için nasıl bildirin.

CEVAP
13 ŞUBAT 2013, ÇARŞAMBA


ElementTree ad alanları hakkında daha fazla zeki değil. *,* 13 ** 12 iterfind() ad yöntemleri açık bir sözlük vermek gerekir. Bu çok iyi belgelenmiş değildir

namespaces = {'owl': 'http://www.w3.org/2002/07/owl#'} # add more as needed

root.findall('owl:Class', namespaces)

Önekler vardırsadecenamespaces parametre baktım içinde geçirir. Bunun anlamı, kullanabilirsiniz herhangi bir ad alanı öneki gibi; API böler kapalı owl: parçası, arar, karşılık gelen ad alanı URL namespaces sözlük, sonra değişiklik aramaya bakmak için bir XPath ifadesi {http://www.w3.org/2002/07/owl}Class yerine. Aynı sözdizimini kendiniz de elbette kullanabilirsiniz:

root.findall('{http://www.w3.org/2002/07/owl#}Class')

Eğer lxml library şeylere geçiş yapabilirsiniz Eğer daha iyi; Bu kütüphane aynı ElementTree API destekler, ama senin için bir ad toplar elemanları .nsmap bir öznitelik.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • JonnyEthco

    JonnyEthco

    5 EKİM 2006
  • The Verge

    The Verge

    8 AĞUSTOS 2006