简体   繁体   中英

PHP select attributes from XML

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

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"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM