Я новичок в Python и в настоящее время участвую в анализе XML. Кажется, все идет хорошо, пока я не ударил стену вложенными пространствами имен.Извлечение вложенного пространства имен из xml с помощью lxml
Ниже приведен фрагмент моего XML (с начала и дочерний элемент, который я пытаюсь разобрать:
<?xml version="1.0" encoding="UTF-8"?>
-<CompositionPlaylist xmlns="http://www.digicine.com/PROTO-ASDCP-CPL-20040511#">
<!-- Generated by orca_wrapping version 3.8.3-0 -->
<Id>urn:uuid:e0e43007-ca9b-4ed8-97b9-3ac9b272be7a</Id>
-------------
-------------
-------------
-<cc-cpl:MainClosedCaption xmlns:cc-cpl="http://www.digicine.com/PROTO- ASDCP-CC-CPL-20070926#"><Id>urn:uuid:0607e57f-edcc-46ec- 997a-d2fbc0c1ea3a</Id><EditRate>24 1</EditRate><IntrinsicDuration>2698</IntrinsicDuration></cc-cpl:MainClosedCaption>
------------
------------
------------
</CompositionPlaylist>
Что я нужно это решение для извлечения URI локального имени ' MainClosedCaption '. В этом случае я пытаюсь извлечь строку «http://www.digicine.com/PROTO- ASDCP-CC-CPL-20070926 #». Я просмотрел множество руководств, но, похоже, не может найти решение.
Если есть кто-нибудь, мы можем предоставить вам свои знания, было бы очень полезно.
Вот что я сделал до сих пор с помощью двух авторов:
#!/usr/bin/env python
from xml.etree import ElementTree as ET #import ElementTree module as an alias ET
from lxml import objectify, etree
def parse():
import os
import sys
cpl_file = sys.argv[1]
xml_file = os.path.abspath(__file__)
xml_file = os.path.dirname(xml_file)
xml_file = os.path.join(xml_file,cpl_file)
with open(xml_file)as f:
xml = f.read()
tree = etree.XML(xml)
caption_namespace = etree.QName(tree.find('.//{*}MainClosedCaption')).namespace
print caption_namespace
print tree.nsmap
nsmap = {}
for ns in tree.xpath('//namespace::*'):
if ns[0]:
nsmap[ns[0]] = ns[1]
tree.xpath('//cc-cpl:MainClosedCaption', namespace=nsmap)
return nsmap
if __name__=="__main__":
parse()
Но это не работает до сих пор. Я получил результат «Нет», когда я использовал QName для поиска тега и его пространства имен. И когда я пытаюсь найти все пространство имен в XML, используя для цикла, как было предложено в другом посте, я получил ошибку «Неизвестный тип возврата: dict»
Любые предложения pls?
Я не следуя вашему описанию. В этом примере точно, какую строку вы пытаетесь извлечь? – David
Я пытаюсь извлечь пространство имен ассоциированного с тегом «MainClosedCaption» –
В этом случае строка, которую я пытаюсь извлечь из xml, это «http://www.digicine.com/PROTO- ASDCP -CC-CPL-20070926 # ' –