@alihang

Почему не работает SimpleXMLElement?

Здравствуйте, есть страница которую я спарсил с vk
$curl = curl_init();
        curl_setopt_array(
            $curl,
            array(
                CURLOPT_URL => 'https://vk.com/foaf.php?id=' . $user_id,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HEADER => false
            )
        );

Передаю данные от курла в переменную и провожу проверки
if (!($user_info = curl_exec($curl)))
            throw new Exception('Не удалось получить информацию о пользователе!');
        elseif (!strpos($user_info, '<ya:firstName>'))
            throw new Exception('Нет информация о пользователе!');

В переменной $user_info хранится foaf код такого вида
<?xml version="1.0" encoding="WINDOWS-1251"?>
<rdf:RDF
    xml:lang="ru"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:ya="http://blogs.yandex.ru/schema/foaf/"
    xmlns:img="http://blogs.yandex.ru/schema/foaf/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <foaf:Person>
    <ya:publicAccess>allowed</ya:publicAccess>
    <ya:profileState>active</ya:profileState>
    <ya:URI ya:primary="yes" rdf:resource="http://vk.com/id"/>
    <ya:URI rdf:resource="http://vk.com/"/>
    <ya:firstName>Имя</ya:firstName>
    <ya:secondName>Фамилия</ya:secondName>
    <foaf:name>ИмяФамилия</foaf:name>
    <foaf:weblog
        dc:title=""
        rdf:resource="http://vk.com/userid"/>
    <ya:created dc:date="2015-09-24T12:23:51+03:00"/>
    <ya:lastLoggedIn dc:date="2018-07-21T20:56:21+03:00"/>
    <ya:modified dc:date="2017-11-09T14:00:17+03:00"/>
    <ya:subscribersCount>81</ya:subscribersCount>
    <foaf:img>
      <foaf:Image ya:primary="yes" img:width="200" img:height="200"
          rdf:about="https://pp.userapi.com/c824203/v824203389/1535e8/F5vrkAA.jpg?ava=1">
        <foaf:thumbnail img:width="100" img:height="100" rdf:resource="https://pp.userapi.com/c824203/v824203389/1535e9/H2SCCwtu.jpg?ava=1"/>
        <foaf:thumbnail img:width="50" img:height="50" rdf:resource="https://pp.userapi.com/c824203/v824203389/1535ea/2_IRnPPir.jpg?ava=1"/>
      </foaf:Image>
    </foaf:img>
  </foaf:Person>
</rdf:RDF>

Мне необходимо получить строчку foaf:name. Пытаюсь сделать это через SimpleXMLElement.
$xml = new SimpleXMLElement($user_info),
file_put_contents($file, $xml->xpath('//<foaf:name>'), FILE_APPEND)

Но при выполнении этого кода вываливаются ошибки
SimpleXMLElement::xpath(): Invalid expression in
SimpleXMLElement::xpath(): xmlXPathEval: evaluation failed in

Что ему собственно надо?
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
DevMan
@DevMan Куратор тега PHP
1. в xpath не указываются скобки. соответственно, '//foaf:name', а не '//<foaf:name>'
2. xpath вернет массив, запись в файл бессмысленна.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы