2009-12-29 12 views
0
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:jskit="http://purl.org/dc/elements/1.1/" > 
    <channel> 
     <title>www.domain.com/page_735.htm comments</title> 
     <link>http://www.domain.com/page_735.html</link> 
     <atom:link rel="self" type="application/rss+xml" href="http://js-kit.com/rss/domain.com/page_735.html"></atom:link> 
     <jskit:attribute key="md5path" value="eb7110ce84f5907c29f0717c171ad35e"></jskit:attribute> 
     <jskit:attribute key="path" value="/page_735.html"></jskit:attribute> 
     <description>RSS comments feed for www.domain.com/page_735.html</description> 
     <generator>JS-Kit Bulk Site Exporter 0.8</generator> 
     <lastBuildDate>Mon, 09 Nov 2009 10:35:47 +0000</lastBuildDate> 
     <item> 
      <guid>jsid-1259747304-188</guid> 
      <pubDate>Wed, 02 Dec 2009 09:48:24 +0000</pubDate> 
      <jskit:attribute key="IP" value="59.182.xxx.xxx"></jskit:attribute> 
      <jskit:attribute key="permalink" value="http://www.domain.com/page_735.html"></jskit:attribute> 
      <author>guest</author> 
      <jskit:attribute key="share_facebook" value="off"></jskit:attribute> 
      <jskit:attribute key="share_gfc" value="off"></jskit:attribute> 
      <jskit:attribute key="share_twitter" value="off"></jskit:attribute> 
      <jskit:attribute key="share_friendfeed" value="off"></jskit:attribute> 
      <jskit:attribute key="share_yahoo" value="off"></jskit:attribute> 
      <jskit:attribute key="Webpresence" value="[]"></jskit:attribute> 
      <description>im a disco dancer</description> 
      <jskit:parent-guid>jsid-1250154466-622</jskit:parent-guid> 
     </item> 
    </channel> 
</rss> 

나는RSS XML 네임 스페이스 혼란

난 단지 추출 할 수 있습니다 :(

가 어떻게 고유 주소 또는 IP 또는 부모 GUID를의 값을 추출 할 내 상상을 넘어서는 XML의 약간 그러나 이것은 방법을 알고 네임 스페이스를 인식하지 파서를 사용하는 경우 GUID, pubDate의, 저자 및 설명

내가 네임 스페이스

+1

사용중인 플랫폼은 무엇입니까? .그물? 자바? "jskit"의 정의는 무엇입니까? 아마 루트 요소에 있습니다. –

+0

지금 xml 파일에 더 많은 데이터를 추가했습니다. PHP에서 simplexml을 사용하여 작업하려고합니다. js-kit의 의견 덤프 인 20MB의 xml 파일이 있습니다. 나는 기본적으로 그것을 mysql 데이터베이스로 가져 오기를 원한다. 문서에 모든 페이지에 대한 채널이 포함되어 있으며, 여러 항목이있다. – vk123

답변

0

을 파악하지 못할, 당신은 그냥 콜론 일부 요소 이름이있을 것이다 그들. 네임 스페이스를 인식하는 파서를 사용하는 경우 콜론 뒤에 파트를 지정하고 API에 어떤 요소를 알려주는지 접두사 앞에 해당 파트에 대해 정의 된 URI를 지정해야합니다.

jskit : attribute -> 'http://purl.org/dc/elements/1.1/'이라는 네임 스페이스의 'attribute'요소

+0

그랬다. $ item = $ xml-> channel [0] -> item [0 ]; $ jskitinfo = $ item-> children ('http://purl.org/dc/elements/1.1/'); 그러나 그 물건들을 돌려주고 그걸 통해 반복 할 수없는 것들이 있습니다. – vk123

+0

자, 이제이 PHP 툴킷을 아는 사람이 도움을 필요로합니다. – bmargulies

0

올바른 노드를 찾으려면 XPath를 사용해야하고, 그 값을 얻으십시오 .xpath()는 항상 배열의 첫 번째 요소 만 반환하는 작은 함수를 작성해야합니다.

XPath 표현식이나 SimpleXML의 children() method을 사용할 수 있습니다. "parent-guid"에는 하이픈을 사용하면 속성의 이름을 조금 어색하게 작성합니다.

여기에 작동 예제가 있습니다.

function attr(SimpleXMLElement $item, $key) 
{ 
    $values = $item->xpath('./jskit:attribute[@key="' . $key . '"]/@value'); 
    return $values[0]; 
} 

$rss = simplexml_load_string($xml); 

foreach ($rss->channel->item as $item) 
{ 
    $permalink = attr($item, 'permalink'); 

    // either 
    $parent_guid = $item->children('http://purl.org/dc/elements/1.1/')->{'parent-guid'}; 

    // or (PHP 5.2) 
    $parent_guid = $item->children('jskit', true)->{'parent-guid'}; 

    // or 
    $parent_guid = $item->xpath('./jskit:parent-guid'); 
    $parent_guid = $parent_guid[0]; 
}