Это правда, что префикс 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?.
len (includingNotes) prints 0 – xralf
Ну, это работает для меня. Пожалуйста, предоставьте более подробную информацию. Какую версию Python вы используете? Я использую 2.7.12. – mzjn
'' не есть'' была проблема. Теперь это работает. – xralf