#python #xml #elementtree #cdata
#python #xml #elementtree #cdata
Вопрос:
Итак, у меня есть XML-файл из локальной папки, который я хочу очистить с помощью Python. Он имеет CData и выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<trial xmlns="urn::trial">
<drksId><![CDATA[DRKS00000024]]></drksId>
<firstDrksPublishDate><![CDATA[2008-09-05T12:36:54.000 02:00]]></firstDrksPublishDate>
<firstPartnerPublishDate><![CDATA[2004-01-15T00:00:00.000 01:00]]></firstPartnerPublishDate>
......
Я пытался:
import xml.etree.ElementTree as Et
tree=Et.parse(filename)
root=tree.getroot()
print(root.find('drksId').text)
Вывод:
Я получаю root.find(‘drksId’) как None. Заранее спасибо
Ответ №1:
Попробуйте выполнить поиск элемента с учетом пространства имен:
ns = {'ns': 'urn::trial'}
drksId = root.find('./ns:drksId', ns)
print(drksId.text)
Комментарии:
1. Эй, так это работает для этого конкретного тега. Другие, что есть иерархия, как <trial><status><state><! [CDATA[complete-завершить]]> </state></status> ……</trial> . Этот метод не работает для такого содержимого
2. Поскольку пространство имен объявлено в корневом элементе, оно также должно применяться ко всем дочерним элементам. В вашем примере это будет
ns:trial/ns:status/ns:state
.