如何找到xml.dom.minidom的兄弟姐妹?

时间:2013-12-21 04:41:54

标签: python xml

我有一个阻止SKOS文件,我试图用xml.dom.minidom读取。这是一个示例条目:

<rdf:Description rdf:about="http://...">
     <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
     <skos:narrowMatch rdf:resource="http://dbpedia.org/resource/Biology"/>
     <skos:narrowMatch rdf:resource="http://rdf.freebase.com/ns/m.01540"/>
     <skos:prefLabel xml:lang="en">Biology and Biochemistry</skos:prefLabel>
     <skos:scopeNote xml:lang="en">Used for all coverage of biology and biochemistry unless a more narrow term applies.</skos:scopeNote>
</rdf:Description>

我可以访问所有skos:prefLabel的类似......

for element in dom.getElementsByTagName('skos:prefLabel'):
    print element.firstChild.data

但我想要相关的skos:ScopeNote。我只是使用了错误的工具吗?

2 个答案:

答案 0 :(得分:1)

我不知道更好的方法,但我会做以下事情:

  1. 获取父节点
  2. 从父级搜索“skos:scopeNote”
  3. 以下是代码:

    for element in doc.getElementsByTagName('skos:prefLabel'):
        print element.firstChild.data
        sibbling = element.parentNode.getElementsByTagName('skos:scopeNote')[0]
        print sibbling.firstChild.data
    

    讨论

    • 由于getElementsByTagName()返回一个列表,并且我确信在父项下有一个该名称的节点,我继续抓住第一个节点(索引[0]
    • 我尝试了element.nextSibbling,但它将新行作为“节点”返回。我可以继续查询下一个sibbling,直到找到我要找的东西,但那是很多代码。此外,无法保证 scopeNote 将遵循 prefLabel ,因此访问父级和搜索更安全。

答案 1 :(得分:1)

你可以试试这个

discriptions = doc.getElementsByTagName("rdf:Description")
for dis in discriptions:
    siblings = dis.childNodes
    for sib in siblings:
        if str(sib.nodeName)=="skos:prefLabel" :
            preflabel = sib.firstChild.data
        if str(sib.nodeName)=="skos:scopeNote":
            scopenote = sib.firstChild.data