1
在堆棧溢出的幫助下,我設法使用一些python代碼來處理xml文件(使用lxml)。我已經能夠適應很多不同的目的,但有一件事我無法解決。如何使用python和lxml檢索某些子元素
例XML:
<?xml version="1.0" encoding="UTF-8" ?>
<TVAMain xml:lang="PL" publisher="Someone" publicationTime="2014-01-03T06:24:24+00:00" version="217" xmlns="urn:tva:metadata:2010" xmlns:mpeg7="urn:tva:mpeg7:2008" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:tva:metadata:2010 http://Something.xsd">
<ProgramDescription>
<ProgramInformationTable>
<ProgramInformation programId="crid://bds.tv/88032"><BasicDescription>
<Title xml:lang="PL" type="episodeTitle">Some Title</Title>
<Synopsis xml:lang="PL" length="short">Some Synopsis</Synopsis>
<Genre href="urn:tva:metadata:cs:EventGenreCS:2009:96">
<Name xml:lang="EN">Some Genre</Name>
</Genre>
<Language>PL</Language>
<RelatedMaterial>
<HowRelated href="urn:eventis:metadata:cs:HowRelatedCS:2010:boxCover">
<Name>Box cover</Name>
</HowRelated>
<MediaLocator>
<mpeg7:MediaUri>file://Images/98528834.p.jpg</mpeg7:MediaUri>
</MediaLocator>
</RelatedMaterial>
的Python代碼將返回標題,流派和概要,但它不會返回到圖像參考(從底部第三線)。我認爲這是因爲名稱格式'mpeg7:MediaUri'(我無法改變)。代碼將返回'No Image'字符串。
這是relavent Python代碼
file_name = input('Enter the file name, including .xml extension: ')
print('Parsing ' + file_name)
from lxml import etree
parser = etree.XMLParser()
tree = etree.parse(file_name, parser)
root = tree.getroot()
nsmap = {'xmlns': 'urn:tva:metadata:2010'}
with open(file_name+'.log', 'w', encoding='utf-8') as f:
for info in root.xpath('//xmlns:ProgramInformation', namespaces=nsmap):
crid = (info.get('programId'))
titlex = (info.find('.//xmlns:Title', namespaces=nsmap))
title = (titlex.text if titlex != None else 'No title')
genrex = (info.find('.//xmlns:Genre/xmlns:Name', namespaces=nsmap))
genre = (genrex.text if genrex != None else 'No Genre')
imagex = (info.find('.//xmlns:RelatedMaterial/xmlns:MediaLocator/xmlns:"mpeg7:MediaUri"', namespaces=nsmap))
image = (image.text if imagex != None else 'No Image')
f.write('{}|{}|{}|{}\n'.format(crid, title, genre, image))
有人能解釋我如何能適應「ImageX的」線,使其返回「文件://Images/98528834.p.jpg」從示例?我看了一下使用方括號,但它導致了一個錯誤。
感謝您的回覆。給它一個嘗試,但得到'SyntaxError:invalid predicate'的錯誤。 任何想法? (沒有足夠的空間來放置整個錯誤)。 – Nick
在「MediaUri」之後已經添加了缺失' – Nick
我不認爲如果涉及python特定的錯誤,只知道xpath和xml,我可以提供很多幫助。因此,從我的答案中的3個代碼段中,您試過哪條線並給出了錯誤? – har07