2010-07-04 4 views
0

이 나는 ​​구조의 XML 파일이 있습니다.XPath와 LXML 구문

<y> 태그의 텍스트를 가져오고 싶습니다.이 때문에 XPath를 사용하기로 결정했습니다. 내가 구문을 알아 낸 첫 번째 y 말할 예상대로이 작동

textFirst = root.xpath('y[1]/text()')

(xroot 가정).

내 문제는 내가 지금 그 문제를 해결하기 위해, 사전에 <y> 태그의 수를 알 수없는 것입니다 그러나, 나는이 한

:

>>> count = 0 
>>> for number in root.getiterator('y'): 
...  count += 1 

그래서 지금은 ycount 수가 있다는 것을 알 x. (태그의 수를 얻을 수있는 더 좋은 방법이 있나요 예, 제안하십시오?)

그러나, 나는이 할 경우 :

>>> def try_it(x): 
...  return root.xpath('y[x]/text()') 
... 
>>> try_it(1) 
[] 

그것은 빈 목록을 반환합니다.

내 질문은 : 임의의 수의 태그를 알지 못하는데 어떻게 XPath 구문이나 표현식을 얻고 lxml을 사용합니까?

죄송합니다. 뭔가 명확하지 않은 경우 문제를 설명하기 위해 최선을 다했습니다.

답변

1

'y[%i]/text()' % x?

이제 실수로 어디에서 실수했는지 알 수 있습니까? :)

y 노드의 수를 계산하기 위해

+0

Ohhhhhhh! 그것은 작동합니다! 정말 고맙습니다. 나는 아주 어리 석다. "y"태그의 수를 얻는 나의 방법은 괜찮습니까? 아니면 더 짧은 버전이 있습니까? – user225312

+0

PulpFiction : 그것은 발생합니다 :) 간단한 방법으로 힌트를 사용하여 답변을 업데이트했습니다. 간단하게 수행하는 방법 – mykhal

+0

mykhal : 도움을 주셔서 감사합니다. 좋은 하루 되세요! :) – user225312

1

(.. 당신이 XPath는 'y' 또는 '//y'과 함께 모든 Y 요소를 캡처 할 수 있습니다), 당신은 XPath 식 'count(/x/y)'을 사용할 수 있습니다.

try_it 함수에서 표현식의 문제점은 입력 매개 변수를 XPath 표현식에 연결하는 대신 리터럴 값 x을 사용하는 것으로 보입니다.

는 어쩌면이 같은 작동합니다 :

>>> def try_it(x): 
...  return root.xpath('y[' + x + ']/text()') 

희망이 도움이!

+0

count()가 필요한 것입니다. 답장을 보내 주셔서 감사합니다. – user225312

+0

왜 count()가 float를 반환합니까? – user225312

+0

@PulpFiction -'lxml'은 숫자 결과를 반환하는 XPath 표현식에 대해 float를 반환합니다 (Java에서는 해당 결과가 'Double' 임). 당신은 단지 그것을 추방 할 수 있어야합니다. – mlschechter