2016-10-01 4 views
0

Я загрузил this XML-файл.Найти узлы, определенные в поврежденном пространстве имен

Я пытаюсь получить includingNote следующим образом:

... 
namespaces = { "skos" : "http://www.w3.org/2004/02/skos/core#", "xml" : "http://www.w3.org/XML/1998/namespace", 
       "udc" : "http://udcdata.info/udc-schema#" } 
... 


includingNote = child.find("udc:includingNote[@xml:lang='en']", namespaces) 
if includingNote: 
    print includingNote.text.encode("utf8") 

Схема расположена here и, кажется, поврежден.

Есть ли способ напечатать includingNote для каждого дочернего узла.

ответ

1

Это правда, что префикс skos не объявлен в udc-схеме, но поиск XML-документа не является проблемой.

Следующая программа извлекает 639 includingNote элементов:

from xml.etree import cElementTree as ET 

namespaces = {"udc" : "http://udcdata.info/udc-schema#", 
       "xml" : "http://www.w3.org/XML/1998/namespace"} 

doc = ET.parse("udcsummary-skos.rdf") 
includingNotes = doc.findall(".//udc:includingNote[@xml:lang='en']", namespaces) 

print len(includingNotes) # 639 

for i in includingNotes: 
    print i.text 

Обратите внимание на использовании findall() и .// перед именем элемента для того, чтобы найти весь документ.


Вот вариант, который возвращает ту же информацию, сначала найти все Concept элементы:

from xml.etree import cElementTree as ET 

namespaces = {"udc" : "http://udcdata.info/udc-schema#", 
       "skos" : "http://www.w3.org/2004/02/skos/core#", 
       "xml" : "http://www.w3.org/XML/1998/namespace"} 

doc = ET.parse("udcsummary-skos.rdf") 
concepts = doc.findall(".//skos:Concept", namespaces) 

for c in concepts: 
    includingNote = c.find("udc:includingNote[@xml:lang='en']", namespaces) 
    if includingNote is not None: 
     print includingNote.text 

Обратите внимание на использование is not None. Без этого это не сработает. Это, по-видимому, особенность ElementTree. См. Why does bool(xml.etree.ElementTree.Element) evaluate to False?.

+0

len (includingNotes) prints 0 – xralf

+0

Ну, это работает для меня. Пожалуйста, предоставьте более подробную информацию. Какую версию Python вы используете? Я использую 2.7.12. – mzjn

+1

'' не есть'' была проблема. Теперь это работает. – xralf

Смежные вопросы