#python #xml #parsing
#python #xml #синтаксический анализ
Вопрос:
У меня есть XML-документ, собранный по ссылке ниже
http://ieeexplore.ieee.org/gateway/ipsSearch.jsp?py=2000amp;hc=100
Я анализирую Title
, Abstract
, Author
и Affiliation
из этого XML-документа и создаю отдельные текстовые файлы. В некоторых документах есть абстрактный элемент, но в некоторых его нет. Я написал скрипт на python, который используется для анализа обязательных полей, но не работает, если какой-либо из вышеупомянутых элементов отсутствует. пожалуйста, предложите любой возможный способ пропустить такие документы 🙂
import xmltodict
for i in range (1000):
with open('C:/Python27/Major Project/2000 ipsSearch.jsp.xml') as fd:
fout = open(str(i) ".txt","w") ## Flush old records from output file
doc = xmltodict.parse(fd.read())
w = doc['root']['document'][i]['rank']
x = doc['root']['document'][i]['title']
y = doc['root']['document'][i]['abstract']
z = doc['root']['document'][i]['authors']
a = doc['root']['document'][i]['affiliations']
fout.write(str(w) "n" str(x) " " str(y) "n" str(z) "n" str(a))
получение ошибки, когда abstract
ни в одном элементе нет элемента document
.
Комментарии:
1. Теперь я вижу код 🙂
if abstrat in doc['root']['document'][i]: y = ... else: y = ''
2. Если ваш
doc
объект представляет собой словарь Python (какxmltodict
следует из названия), вы можете использовать егоget
метод :y = doc['root']['document'][i].get('abstract')
. Это присваиваетсяNone
y
, когда ключ отсутствует (чтобы изменить это значение, просто укажитеdefault
аргумент дляget
).
Ответ №1:
Играйте безопасным способом — сначала проверьте, присутствует ли элемент, в противном случае назначьте пустую строку.
Теперь, поскольку проанализированный XML отображается как словарь, вы можете использовать in
оператор для проверки этого, а тернарный if...else
оператор по умолчанию для случаев, когда вы не можете найти abstract
:
...
y = doc['root']['document'][i]['abstract'] if 'abstract' in doc['root']['document'][i] else ''
z = doc['root']['document'][i]['authors'] if 'authors' in doc['root']['document'][i] else ''
...
То же самое касается всех элементов.