2011-03-25 2 views
0

다음 스크립트를 사용하여 RSS 제목의 POST TITLE 및 CONTENT를 가져옵니다. 그 구조는 다음과 같습니다. (나는 아무런 실수도하지 않았 음)요청 된 데이터를 표시하는 데 사용할 xPath는 무엇입니까?

<div id="feedBody"> 
<div id="feedContent"> 
<div class="entry"> 
<h3>TITLE OF POST</h3> 
<div base="http://feeds.feedburner.com/blogspot/hyMBI" 
    class="feedEntryContent" 
    > CONTENT OF POST </div> 
</div> 
</div> 
</div> 




<?php 
$dom = new DOMDocument; 
libxml_use_internal_errors(TRUE); 
$dom->loadHTMLFile('http://feeds.feedburner.com/blogspot/hyMBI'); 
libxml_clear_errors(); 

$xPath = new DOMXPath($dom); 
$links = $xPath->query('????????????????'); 
foreach($links as $link) { 
    printf("%s \n", $link->nodeValue); 
} 
?> 

데이터를 얻기 위해 xPath는 무엇을 사용해야합니까? 그 (것)들을 분리시키는 어떤 방법 있는가? 감사합니다. 잘하면이 프로젝트에 대한 내 마지막 질문입니다 ...

+0

$ dom-> loadHTMLFile이 아닌 dom (>) ( – SilverbackNet

답변

0

먼저 이 아닌 loadHTMLFile을 사용하여 XML을로드해야합니다.

변수 이름을 "$ links"로 판단하면 <item> 요소 내에 <link> 요소의 값을 원할 것입니다. 따라서 xpath 쿼리를 구성하면 다음과 같이됩니다 : //item/link.

+0

) 안녕하세요, 답장을 보내 주셔서 감사합니다. 위의 코드는 자습서에서 찾은 예제입니다. 내가 한 말대로했는데 링크 대신 제목과 내용을 어떻게 얻을 수 있습니까? – EnexoOnoma

+0

가장 쉬운 방법은''노드를'// item'로 가져 오는 것입니다. 발견 된 각 노드에 대해'$ xPath-> query ('/ title', $ item)'을 사용하여 제목을 얻고 '$ xPath-> query ('/ description', $ item)'를 사용하여 내용을 가져옵니다. – Anomie

+0

정확히 내가 원했던 단서! 내가 RSS 출처에서 보았 듯이, 내가 입력 한 경로에 대해서는 틀 렸습니다. 아이템/링크 아이템/타이틀 아이템/설명이 트릭을 만들었습니다! 이제 이미지와 콘텐츠를 분리하려고합니다. 나는 strpos에 대해 어딘가에 대해 읽었지만, 당신이 그것을 볼 수 있다면 그것은 좋을 것이다. 다시 한 번 감사드립니다! – EnexoOnoma

0

기본 XPath : //div[@class="entry"]은 모든 항목의 배열을 가져옵니다. //div[@class="entry"][1]으로 첫 번째 (또는 유일한) 항목을 가져올 수 있습니다. 이를 통해 h3을 사용하여 제목 노드의 텍스트를 가져올 수 있고 div[1]을 사용하여 내용을 얻을 수 있습니다 (단 하나만 있다고 보장되는 경우). 그렇지 않으면 클래스를 지정하십시오.

원하는 경우 //div[@class="entry"][1]/h3과 같이 입력 할 수 있으므로 루트 노드 만 쿼리하면됩니다. 그렇지 않으면처럼, 다음 쿼리에 대한 새로운 노드를 저장 : 당신의 RSS 게시물의 전체 그룹을 반환하는 경우

$entries = $xPath->query('//div[@class="entry"][1]'); 
foreach($entry in $entries) { 
    $title = $xPath->evaluate('h3[1]',$entry); 
    $post = $xPath->evaluate('div[1]',$entry); 
} 

, 당신은 전체 그룹을 통해이 방법을 처음 [1] 및 루프를 남길 수 있습니다.

+0

안녕하십니까. 답장을 보내 주셔서 감사합니다. // div가있는 경우에도 아무 것도 표시 할 수 없습니다. – EnexoOnoma

+0

액세스중인 피드의 실제 스 니펫 위에있는 HTML이 있습니까? 그렇지 않은 경우 실제 피드의 일부를 게시하십시오. – SilverbackNet

+0

'// div [@ class = "entry"] [1]' "당신이하는 말을하지 않습니다. 여기를보세요 : http://stackoverflow.com/questions/4672997/xslt-select-all-nodes- -A-specific-substring/4674372 # 4674372 –

관련 문제