Как распечатать содержимое CData при разборе локального файла XML с помощью python?

#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 .