【问题标题】:XPath: match multiple elements in one expressionXPath:在一个表达式中匹配多个元素
【发布时间】:2010-07-24 13:45:25
【问题描述】:

我正在尝试这样做(使用 lxml):

//*[@id="32808345" or @id="33771423" or @id="15929470" or @id="33771117" or @id="15929266"]

为了获取所有元素,无论是什么标签,都具有指定的id。我得到以下回溯:

invalid attribute predicate

这就是我生成 str 的方式(如果这与问题相关):

refs = ' or '.join('@id="%s"' % ref for ref in refs[0:5])
elements = etree.iterfind('//*[%s]' % refs)

编辑,使用以下解决方案我收到此错误:

File "lxml.etree.pyx", line 1201, in lxml.etree._Element.iterchildren (src/lxml/lxml.etree.c:36294)
  File "lxml.etree.pyx", line 2163, in lxml.etree.ElementChildIterator.__init__ (src/lxml/lxml.etree.c:45331)
  File "lxml.etree.pyx", line 2118, in lxml.etree._ElementTagMatcher._initTagMatch (src/lxml/lxml.etree.c:44913)
  File "apihelpers.pxi", line 1413, in lxml.etree._getNsTag (src/lxml/lxml.etree.c:21412)
ValueError: Empty tag name

【问题讨论】:

  • 我不确定 python xpath 实现需要什么,但 xpath 在其他语言中适用于我。

标签: python xpath lxml


【解决方案1】:

尝试使用xpath 方法而不是iterfind

我认为iterfind 方法不接受所有 XPath 表达式。

【讨论】:

    【解决方案2】:

    我相信正常的方法是使用单管道运算符?

    //*[@id="20"] | //*[@id="30"] | ... etc.
    

    您是否有您尝试在其上执行此操作的 XML 的 sn-p?

    【讨论】:

    • 基于该 XML,上述工作。那是你要找的吗?根据mizar.dk/XPath/Default.aspx,使用上面的 ID 为 2 和 7 匹配 XML 中的成员 2 和 7。
    • 啊,好吧,你改变了你的帖子,现在它似乎工作了。谢谢!
    • 恐怕我无能为力:/ 看起来 lxml 有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多