2010-07-24 142 views
1

我试图做到这一点(使用lxml的):XPath的:在一个表达式匹配多个元素

//*[@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 
+0

我不确定python xpath实现需要什么,但xpath在其他语言中适用于我。 – Wrikken 2010-07-24 13:59:34

回答

4

正常的做法是使用单管操作符,我相信?

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

你有没有你想要做的XML的片段?

+0

请参阅:http://paste.pocoo.org/show/241242/ – 2010-07-24 14:00:07

+0

基于该XML,上述工作。那是你在找什么? 根据http://www.mizar.dk/XPath/Default.aspx使用以上ID与ID 2和7匹配XML中的成员2和7。 – kander 2010-07-24 14:03:39

+0

啊,好吧,你改变了你的帖子,现在看来工作。 谢谢! – 2010-07-24 14:05:19

1

尝试使用xpath方法而不是iterfind

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