2010-03-07 3 views
12

웹 페이지에서 정보를 추출하고 싶습니다.컨텍스트 노드에서 노드를 찾으려면 XPath를 사용하십시오 (firefox/firebug/javascript)

페이지는 .evaluate ("// div [@ class = 'news'] ', 문서, ....)에서 찾을 수있는 m 개의 노드가 있습니다.

위의 각 노드에는 노드가 3 개 있습니다. 각각은 다른 @class selector를가집니다. 그리고이 3-tuple 레코드를 추출하고 싶습니다.

parentNodes = document.evaluate("//div[@class='news']", document, ....). 
while (true){ 
    var node = parentNodes.iterateNext(); 
    var child = document.evaluate("//div[@class='title']", node, ....). 
    ... 
} 

는 그러나 "아이"항상에서 첫 번째 노드에 할당 된 코드를 사용하여

https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript

의 지침에 따라

나는 .evaluate() 함수를 사용하려고 문서, "노드"내의 첫 번째 노드 대신.

나는 이것을 방화범 콘솔에서 돌렸다.

무엇이 잘못되었는지 알고 있나요?

답변

17

당신은 문서에서 평가를 호출합니다. 따라서 XPath 표현식은 XML 트리의 루트에서 평가됩니다. 또한 XPath가 현재 컨텍스트를 사용하여 노드를 선택하도록하려는 경우. 현재 노드의 자식 중 ".//"컨텍스트 선택자를 사용해야합니다.

+0

"." 앞에 열쇠가있었습니다. 컨텍스트를 지정할 수 있지만 경로가 루트와 관련이 있다는 점이 나에게 이상한 것 같습니다. 어깨를 으해라. – dbreaux

+1

@dbreaux 리눅스 셸과 닮았습니다.'/ bin/bash'는 현재 디렉토리에 bin이라는 다른 dir이 있으면'./bin/bash' 또는 'bin/bash' – Morad

6

"/"를 사용하여 XPath 표현식을 시작하면 컨텍스트 노드의 루트 노드/문서 노드에서 시작합니다. 따라서 "//div[@class = 'title']" 대신 "descendant::div[@class = 'title']"을 사용하면 컨텍스트 노드의 하위 노드 div 요소를 선택하게됩니다.

+0

두 방법 모두 매력처럼 작동합니다. 너희들을 그렇게 많이 고맙다! – manova

+3

BTW'descendant :: div [@class = 'title']'는'.//div[@class = 'title']'과 동일합니다. – Tomalak

0

location path selectordescendant-or-self도 사용할 수 있습니다. 이와 같이 : descendant-or-self::div... 노드가 컨텍스트로 전달되면 참조를 시작합니다.

도움이 되었기를 바랍니다.

관련 문제