0

I want to extract from this XML file:"ENTRY_URL where TITLE = Episodul 1: Pilot"

<?xml version="1.0"?>
<methodResponse>
    <params>
        <param>
            <value>
                <array>
                    <data>
                        <value>
                            <struct>
                                <member>
                                    <name>MATERIAL_ID</name>
                                    <value>
                                        <i4>5464</i4>
                                    </value>
                                </member>
                                <member>
                                    <name>TITLE</name>
                                    <value>
                                        <string>Episodul 1: Pilot</string>
                                    </value>
                                </member>
                                <member>
                                    <name>MESSAGE</name>
                                    <value>
                                        <string></string>
                                    </value>
                                </member>
                                <member>
                                    <name>ENTRY_URL</name>
                                    <value>
                                        <string>
                                            http://www.ufilme.ro/load/under_the_dome_online/sezonul_1/episodul_1_pilot/674-1-0-5464
                                        </string>
                                    </value>
                                </member>
                                <member>
                                    <name>CATEGORY_NAME</name>
                                    <value>
                                        <string>Sezonul 1</string>
                                    </value>
                                </member>
                                <member>
                                    <name>CATEGORY_URL</name>
                                    <value>
                                        <string>http://www.ufilme.ro/load/under_the_dome_online/sezonul_1/674</string>
                                    </value>
                                </member>
                                <member>
                                    <name>COMMENTS_NUM</name>
                                    <value>
                                        <i4>0</i4>
                                    </value>
                                </member>
                                <member>
                                    <name>COMMENTS_URL</name>
                                    <value>
                                        <string>
                                            http://www.ufilme.ro/load/under_the_dome_online/sezonul_1/episodul_1_pilot/674-1-0-5464#comments
                                        </string>
                                    </value>
                                </member>
                                <member>
                                    <name>USER_NAME</name>
                                    <value>
                                        <string>uFilme</string>
                                    </value>
                                </member>
                                <member>
                                    <name>USER_ID</name>
                                    <value>
                                        <i4>1</i4>
                                    </value>
                                </member>
                                <member>
                                    <name>RATING</name>
                                    <value>
                                        <string>0.0</string>
                                    </value>
                                </member>
                                <member>
                                    <name>RATED</name>
                                    <value>
                                        <i4>0</i4>
                                    </value>
                                </member>
                                <member>
                                    <name>READS_NUM</name>
                                    <value>
                                        <i4>1246</i4>
                                    </value>
                                </member>
                                <member>
                                    <name>LOADS_NUM</name>
                                    <value>
                                        <i4>0</i4>
                                    </value>
                                </member>
                                <member>
                                    <name>DATE</name>
                                    <value>
                                        <string>11.07.2013</string>
                                    </value>
                                </member>
                                <member>
                                    <name>TIME</name>
                                    <value>
                                        <string>5:58 PM</string>
                                    </value>
                                </member>
                                <member>
                                    <name>TIMESTAMP</name>
                                    <value>
                                        <i4>1373554697</i4>
                                    </value>
                                </member>
                            </struct>
                        </value>
                        <value>
                            ...
                        </value>
                        ...
                    </data>
                </array>
            </value>
        </param>
    </params>
</methodResponse>

I tryed a code that i found on internet

$xml = simplexml_load_string($catapi);
$results = $xml->xpath('//methodResponse/params/param/array/data/value/struct/member/name[. = "TITLE"];

but it does not make logic :| here is an live example : http://www.ufilme.ro/api/load/under_the_dome_online/sezonul_1/674?apikey=raxeIJAb5ZnwoGn3

3
  • @Dai: If you edit it for indents, then please do properly. Commented Aug 27, 2013 at 21:42
  • @hakre I started, but there's just too many - so I did the first few to give an idea of the structure of the document. Feel free to finish off for me :) Commented Aug 27, 2013 at 21:46
  • @Dai: The original file isn't indented, anyway, here is the indentation run on that file (don't do that by hand let your IDE do it). Commented Aug 27, 2013 at 21:57

1 Answer 1

1

The XML you have is not only XML, it is actually an XML-RPC response you can decode with the according PHP function named xmlrpc_decode and then just access the element:

$filter = function($key, $value) {
    return function(array $entry) use ($key, $value) {
        return isset($entry[$key]) && $entry[$key] === $value;
    };
};

$titleFilter = $filter('TITLE', 'Episodul 1: Pilot');
$array       = xmlrpc_decode(file_get_contents($url), 'utf-8');
$result      = array_filter($array, $titleFilter);

echo array_values($result)[0]['ENTRY_URL']; // prints "http://www.ufilme.ro/load/under_the_dome_online/sezonul_1/episodul_2_the_fire/674-1-0-5465"
Sign up to request clarification or add additional context in comments.

3 Comments

I knew it looked something like a SOAP response or something (because of the seemingly unnecessary verbosity) but I didn't know PHP had functions for handling it built-in. TIL.
@Dai: Check your PHP configuration if you have it activated (for my PHP configuration I needed to activate it). If you don't get that extension to run there are also other XML-RPC parsers written purely in PHP, so you don't need to install that extension if you think it's too much work. Just let me know if you run into any problems.
@Dai: And yes, XML-RPC is a predecessor of SOAP.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.