用Python中的命名空间通过‘ElementTree’解析XML

用Python中的命名空间通过‘ElementTree’解析XML

我有以下XML,我想使用Python的ElementTree:

<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标记,然后提取所有rdfs:label它们里面的例子。我使用以下代码:

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

由于名称空间,我得到以下错误。

SyntaxError: prefix 'owl' not found in prefix map

我试着在http://effbot.org/zone/element-namespaces.htm但我仍然无法做到这一点,因为上面的XML有多个嵌套的名称空间。

请告诉我如何更改代码以查找所有owl:Class标签。


子衿沉夜
浏览 2317回答 3
3回答

qq_花开花谢_0

下面是如何使用lxml实现此操作,而不必对名称空间进行硬编码或扫描它们的文本(正如Martijn Pieters所提到的):from&nbsp;lxml&nbsp;import&nbsp;etree tree&nbsp;=&nbsp;etree.parse("filename")root&nbsp;=&nbsp;tree.getroot()root.findall('owl:Class',&nbsp;root.nsmap)
打开App,查看更多内容
随时随地看视频慕课网APP