XPath:在一个表达式中匹配多个元素

2 投票
2 回答
4141 浏览
提问于 2025-04-16 01:46

我正在尝试用 lxml 做这个:

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

目的是获取所有元素,不管是什么标签,只要是指定的 id。我遇到了以下错误信息:

invalid attribute predicate

这是我生成字符串的方式(如果这和问题有关的话):

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

2 个回答

2

试试用 xpath 方法,而不是 iterfind

我觉得 iterfind 方法不支持所有的 XPath 表达式。

6

我觉得通常的做法是用单个管道符号,对吧?

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

你能给我一段你想要处理的XML代码吗?

撰写回答