如何使用python和lxm检索某些子元素

2024-10-01 09:39:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在堆栈溢出的大量帮助下,我设法让一些python代码处理xml文件(使用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”字符串。在

这是相关的python代码

^{pr2}$

有人能解释一下我如何调整'imagex'行,使它返回'文件://Images/98528834.p.jpg“从这个例子来看?我曾试过使用方括号,但它导致了一个错误。在


Tags: 代码namelangtitlesomexmlplmetadata
1条回答
网友
1楼 · 发布于 2024-10-01 09:39:01

您感兴趣的节点具有mpeg7名称空间,而不是默认名称空间。您可以尝试使用以下语法*[local-name() = "elementName"]根据元素的本地名称匹配元素(忽略命名空间):

imagex = info.xpath(
    './/xmlns:RelatedMaterial/xmlns:MediaLocator/*[local-name() = "MediaUri"]',
   namespaces=nsmap)[0]

或在名称空间声明中添加mpeg7

^{pr2}$

然后可以在xpath查询中使用mpeg7前缀:

^{3}$

相关问题 更多 >