【问题标题】:lxml xpath filter with OR condition not working具有 OR 条件的 lxml xpath 过滤器不起作用
【发布时间】:2014-09-12 00:10:28
【问题描述】:

langs对象是解析这个文件产生的lxml对象:http://www.loc.gov/standards/codelists/languages.xml

此 xpath 有效:

langs.node.xpath("//lang:language[lang:name='English']", namespaces={'lang':'info:lc/xmlns/codelist-v1'})[0].findtext('lang:name', namespaces={'lang': 'info:lc/xmlns/codelist-v1'})

当我添加 | 的附加条件时lang:code = 'English' 像这样:

langs.node.xpath("//lang:language[lang:name='English' | lang:code='English']", namespaces={'lang':'info:lc/xmlns/codelist-v1'})[0].findtext('lang:name', namespaces={'lang': 'info:lc/xmlns/codelist-v1'})

我得到错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "lxml.etree.pyx", line 1509, in lxml.etree._Element.xpath (src/lxml /lxml.etree.c:50717)
  File "xpath.pxi", line 318, in lxml.etree.XPathElementEvaluator.__call__ (src/lxml/lxml.etree.c:145969)
  File "xpath.pxi", line 238, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:144977)
  File "xpath.pxi", line 223, in lxml.etree._XPathEvaluatorBase._raise_eval_error  (src/lxml/lxml.etree.c:144785)
XPathEvalError: Invalid type

【问题讨论】:

    标签: python xpath lxml


    【解决方案1】:

    正确的语法是or,而不是|

    nsmap={'lang': 'info:lc/xmlns/codelist-v1'}
    langs.node.xpath("//lang:language[lang:name='English' or lang:code='English']",
      namespaces=nsmap)[0].findtext('lang:name', namespaces=nsmap)
    

    【讨论】:

      【解决方案2】:

      再用谷歌搜索 10 分钟,我得到了答案:

      我将 | 更改为

      langs.node.xpath("//lang:language[lang:name='English' or lang:code='English']", namespaces={'lang':'info:lc/xmlns/codelist-v1'})[0].findtext('lang:name', namespaces={'lang': 'info:lc/xmlns/codelist-v1'})
      

      【讨论】:

      • 非常正确的答案。也就是说,我相信我在你之前 30 秒左右点击了“发表评论”。 :)
      • 是的:| 是 XPath 中的 union 运算符。有时它可以用作与or 相同的效果,但只是偶然,除非您知道自己在做什么。
      猜你喜欢
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      相关资源
      最近更新 更多