2012-02-12 5 views
1

무엇 임 내 그리스 몽키 스크립트로 일을하려고하는 것은 먼 XML-문서에서 요소를 얻기 위해 XPath를 사용하여 :그리스 몽키 :

  • 먼 XML 문서를 읽을;

  • XML 개체로 변환하십시오.

  • 그런 다음 XPath를 사용하여 요소를 가져옵니다.

방법은 내 XML 객체와 잘 작동하는 getElementsByTagName (태그 이름)

하지만 는 ("XPath 식을") 평가하지 않습니다. 어떤 제안? 아래의 코드를 참조하십시오 :

GM_xmlhttpRequest({ 
    method: "GET", 
    url: "http://www.someserver.com/atom.xml", 
    onload: function(response) { 
     if (!response.responseXML) { 
     var xmlDoc = new DOMParser().parseFromString(response.responseText, "application/xml"); 
     } 

// this section works fine and returns the data of the first <entry>..</entry> 
     var snapEntries = xmlDoc.getElementsByTagName("entry"); 
      alert (snapEntries[0].data); 

// this section doesn't work for unknown reason and returns nothing   
     var snapEntriesXpath = xmlDoc.evaluate("//entry", xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 
      alert (snapEntriesXpath.snapshotItem(0).data); 
    } 
}); 

답변

1

IIRC을의 .data 속성은 검색의 모든 종류되지 않을 것입니다.

당신 은 아마 필요 사용하기 :

var snapEntriesXpath = xmlDoc.evaluate (
    "//entry//text()", xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null 
); 

그러나 여러 가지 다른 문제가 놀이에있을 수 있습니다. 그렇게하지 않으면 (1) 정확한 XML 파일로 링크합니다. 필요한 경우 pastebin.com을 사용하십시오. (2) Firefox의 오류 콘솔 (CtrlShift)이보고됩니다.

+0

no. 그것은 XPath 평가가 아닌 이유입니다. 위의 코드에서 경고 (snapEntries.length) 및 경고 (snapEntriesXpath.snapshotLength)를 추가 할 수 있습니다. 첫 번째 경우에는 항목 수가 다시 계산되고 두 번째 항목에서는 0이 반환됩니다. – user1199523

+0

XML 문서는 사용자가 생각하는 것이 아니며 'evaluate' 문을 편집 한 것입니다. 이 코드는 적절한 XML 문서에서 작동합니다. XPath는 대소 문자를 구분합니다. 요청 된 정보를 제공하십시오. –

+0

확인. XML 문서에 문제가있을 것입니다 (단, 표준 블로거 피드 아톰 임). 글쎄, 내게는 * response.responseText *를 정규식을 사용하여 구문 분석하는 것이 훨씬 빠르다. :) – user1199523

관련 문제