RSS XML namespace karışıklık

2 Cevap php
<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>

Ben xml biraz ama benim hayal gücünün ötesinde bu bir yol biliyorum: (

Nasıl permalink veya IP veya ebeveyn-guid değerini ayıklamak

Ben sadece guid, pubdate, yazar ve açıklama elde edebilirsiniz

İsim alanlarını çözemiyorum

2 Cevap

Bir ad-habersiz ayrıştırıcı kullanırsanız, o zaman sadece onlara iki nokta üst üste ile bazı element adları olacaktır. Bir ad-aware ayrıştırıcı kullanırsanız, sizin için ne arıyorsanız unsur API söylüyorum zaman öneki önce kısmı için tanımlanan kolon ve URI sonra kısmını belirtmek zorunda kalacak.

örneğin jskit: öznitelik -> isimli ad 'niteliği' "http://purl.org/dc/elements/1.1/ 'adlı bir unsur.

Sen doğru düğümleri bulmak için XPath kullanmak zorunda olacak, o dışarı değeri olsun. XPath () her zaman bir dizi döndürür, böylece o dizinin sadece ilk elemanını döndürür küçük bir fonksiyon yazmak gerekecek.

Alanlı elemanları erişmek için, bir XPath ifadesi kullanabilir ya ya SimpleXML en children() method. "Ebeveyn-guid" bir tire içerdiğinden, biraz garip özelliğin adını yazma yapar.

Burada çalışan bir örnektir:

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];
}