2010-07-24 2 views
1

하나 개의 표현에서 여러 요소를 일치 :XPath는 :이 (사용 LXML를) 할 노력하고있어

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

에 상관없이, 모든 요소를 ​​얻을하기 위해 지정된 아이디의 무엇 태그.

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

편집 난 아래 솔루션, (그 문제에 관련이있는 경우) 내가 str을 생성하고있어 어떻게이

invalid attribute predicate 

: 나는 다음 역 추적을 받고 있어요 이 오류가 발생합니다 :

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

답변

4

정상적인 방법은 단일 파이프 연산자를 사용하는 것입니다.

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

이 작업을 수행하려는 XML 스 니펫이 있습니까?

+0

참조 : http://paste.pocoo.org/show/241242/ –

+0

해당 XML을 기반으로 위의 작동합니다. 그게 니가 찾고 있던거야? http://www.mizar.dk/XPath/Default.aspx에 따르면 위의 ID 2와 7은 XML의 구성원 2와 7과 일치합니다. – kander

+0

아, 알았어. 글을 바꿨다. 이제는 효과가있는 것 같다. 감사합니다. –

1

iterfind 대신 xpath 메서드를 사용해보십시오.

나는 iterfind 메서드가 모든 XPath 표현식을 허용하지 않는다고 생각합니다.