繁体   English   中英

在使用 lxml XPATH 搜索多个元素时需要帮助

[英]need help on searching multiple elements using lxml XPATH

我有以下 XML:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Bdpo>
  <ListaRegistrosBdpo>
    <RegistroBdpo>
      <Empresa>03271</Empresa>
      <DataRegistro>2018-03-27</DataRegistro>
      <DataOcorrencia>2017-11-08</DataOcorrencia>
      <DataReconhecimento>2017-11-17</DataReconhecimento>
      <NumeroEvento>00008</NumeroEvento>
      <TipoEvento>6</TipoEvento>
      <PerdaRaizDataRegistro>2018-02-08</PerdaRaizDataRegistro>
      <PerdaRaizNumeroEvento>00250</PerdaRaizNumeroEvento>
      <Categoria>7</Categoria>
      <OrigemJudicial>1</OrigemJudicial>
      <ContabilizadaPsl>2</ContabilizadaPsl>
      <FuncaoNegocio>1</FuncaoNegocio>
      <CausaPerda>2</CausaPerda>
      <StatusPerda>2</StatusPerda>
      <ValorBruto>0.00</ValorBruto>
      <DescricaoEvento>123</DescricaoEvento>
      <IdInternaEvento>Pasta 95</IdInternaEvento>
    </RegistroBdpo>
    <RegistroBdpo>
      <Empresa>03271</Empresa>
      <DataRegistro>2018-03-27</DataRegistro>
      <DataOcorrencia>2017-11-08</DataOcorrencia>
      <DataReconhecimento>2017-11-17</DataReconhecimento>
      <NumeroEvento>00007</NumeroEvento>
      <TipoEvento>6</TipoEvento>
      <PerdaRaizDataRegistro>2018-02-08</PerdaRaizDataRegistro>
      <PerdaRaizNumeroEvento>00248</PerdaRaizNumeroEvento>
      <Categoria>7</Categoria>
      <OrigemJudicial>1</OrigemJudicial>
      <ContabilizadaPsl>2</ContabilizadaPsl>
      <FuncaoNegocio>1</FuncaoNegocio>
      <CausaPerda>2</CausaPerda>
      <StatusPerda>2</StatusPerda>
      <ValorBruto>0.00</ValorBruto>
      <DescricaoEvento>123</DescricaoEvento>
      <IdInternaEvento>Pasta 41</IdInternaEvento>
    </RegistroBdpo>
    (...)
  </ListaRegistrosBdpo>
</Bdpo>

我想搜索符合以下条件的 RegistroBdpo 元素:

  1. TipoEvento标签等于 5 或 6
  2. PerdaRaizNumeroEvento标记等于 00250 并返回它们的 Id 标记 (IdInternaEvento)。

我尝试了以下代码:

import lxml.etree as ET
  
r = ET.parse(xml_file_location)

string = './/*RegistroBdpo[TipoEvento="5" or TipoEvento="6"][PerdaRaizNumeroEvento="00250"]'
[ reg.find('IdInternaEvento').text for reg in r.iterfind(string) ]

但我得到错误: SyntaxError: invalid predicate

关于我做错了什么有什么想法吗? 谢谢。

就 XPath 而言,您只需要//RegistroBdpo[TipoEvento=5 or TipoEvento=6][PerdaRaizNumeroEvento="00534"]/IdInternaEvento 或者更确切地说//RegistroBdpo[TipoEvento=5 or TipoEvento=6][PerdaRaizNumeroEvento="00250"]/IdInternaEvento ,具体取决于文本中给出的值与您的代码示例。

在带有 lxml 的 Python 中,您可以使用例如ids = r.xpath('//RegistroBdpo[TipoEvento=5 or TipoEvento=6][PerdaRaizNumeroEvento="00250"]/IdInternaEvento')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM