2017-09-19 8 views
0

ノード名にコロンとXMLフィードから特定の値を取得します。私が正しく、次のXMLフィードからいくつかの値を取得する方法を見つけることができないよう

<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:newznab="http://www.newznab.com/DTD/2010/feeds/attributes/" encoding="utf-8"> 
<channel> 
    <atom:link href="https://REMOVED.com/api" rel="self" type="application/rss+xml"/> 
    <title>REMOVED</title> 
    <description>API Details</description> 
    <link>https://REMOVED.com/</link> 
    <language>en-gb</language> 
    <webMaster>[email protected]</webMaster> 
    <category>Stuff</category> 
    <generator>Me</generator> 
    <ttl>10</ttl> 
    <docs>https://removed.com/apihelp/</docs> 
    <image url="https://removed.com/themes/shared/img/logo.png" title="REMOVED" link="https://removed.com/" description="Visit REMOVED"/> 
    <newznab:response offset="0" total="125000"/> 
    <item> 
    <title>Fair.Go.2017.09.18.HDTV.x264-FiHTV </title> 
    <guid isPermaLink="true">https://REMOVED.com/details/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d</guid> 
    <link>https://REMOVED.com/getnzb/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d.nzb&amp;i=1&amp;r=3bc4e94ef14337e4e2b490a3897c48f6</link> 
    <comments>https://REMOVED.com/details/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d#comments</comments> 
    <pubDate>Tue, 19 Sep 2017 10:18:21 +0200</pubDate> 
    <category>TV &gt; SD</category> 
    <description>Fair.Go.2017.09.18.HDTV.x264-FiHTV </description> 
    <enclosure url="https://REMOVED.com/getnzb/427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d.nzb&amp;i=1&amp;r=3bc4e94ef14337e4e2b490a3897c48f6" length="168013625" type="application/x-nzb"/> 
    <newznab:attr name="category" value="5030"/> 
    <newznab:attr name="size" value="168013625"/> 
    <newznab:attr name="files" value="17"/> 
    <newznab:attr name="poster" value="[email protected] (yeahsure)"/> 
    <newznab:attr name="prematch" value="1"/> 
    <newznab:attr name="info" value="https://REMOVED.com/api?t=info&amp;id=427d2b6c5fb3a0f73bd43be4bb8cff955700fd4d&amp;r=3bc4e94ef14337e4e2b490a3897c48f6"/> 
    <newznab:attr name="grabs" value="0"/> 
    <newznab:attr name="comments" value="0"/> 
    <newznab:attr name="password" value="0"/> 
    <newznab:attr name="usenetdate" value="Tue, 19 Sep 2017 10:07:47 +0200"/> 
    <newznab:attr name="group" value="alt.binaries.teevee"/> 
    </item> 
</channel> 
</rss> 

私はから値を必要とし、これらのノードからsizeとusenetdateの値を取り出し、配列に格納します。ここには1つしかありませんが、実際のフィードには数百もあります。

PHPで難しいことはありませんか?しかし、XMLWriter、DOM、SimpleXMLはすべて私には役に立たなかった。または私はそれらに失敗しました。

任意のポインタ?

+0

試したコードと予想される出力を共有してください。 –

+0

要素名の形式は 'prefix:localname'です。接頭辞(newznabなど)はXML名前空間(ここでは' http:// www.newznab.com/DTD/2010/feeds/attributes/')を表します。このXMLを処理するには、選択した処理ライブラリがXML名前空間をどのように扱うかを理解する必要があります。通常は、(namespace、local-name)のペアを使用して要素を探したいと思うでしょう。 –

答えて

1

名前空間を使用するときに問題が発生しますが、どのXMLシステムでも対処するのは簡単です。ここではSimpleXMLを使用しました。私はそれが繰り返されたチャンネルだとも仮定しています。

名前空間を使用するには、XMLシステムに登録して検索と関連付ける方法を知っておく必要があります。newznabを接頭辞としてattrに使用します。しかし、これはXML文書で見られるものなので、読みやすくなります。 XPathは[@name='size']を使用して、この属性/値の組み合わせを持つattrのインスタンスを検索し、valueという属性を返します。

$xml = simplexml_load_file('NewFile.xml'); 
$xml->registerXPathNamespace("atom", "http://www.w3.org/2005/Atom"); 
$xml->registerXPathNamespace("newznab", "http://www.newznab.com/DTD/2010/feeds/attributes/"); 

foreach($xml->channel as $channel){ 
    echo "Channel title=".(string)$channel->title.PHP_EOL; 
    echo "size=".(string)$channel->xpath("descendant::newznab:attr[@name='size']/@value")[0].PHP_EOL; 
    echo "usenetdate=".(string)$channel->xpath("descendant::newznab:attr[@name='usenetdate']/@value")[0].PHP_EOL; 
} 
関連する問題