Синтаксический анализ XML в PHP без захвата одной переменной

Я делаю базовую аутентификацию пользователя в PHP и получаю результаты аутентификации через XML-файл, который затем анализируется в PHP-переменных.

Вот код PHP:

<?php

$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
$str = $username . ":" . $password;
$client_id = md5($str);
$auth_str = base64_encode($str);
$client_id_str = "client-identifier: " . $client_id;
$plex_auth = "authorization: Basic " . $auth_str;

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://someurl/sign_in.xml",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
$plex_auth,
$client_id_str,
"header3",
"header4"),
));

$response = curl_exec($curl);

$xml = simplexml_load_string($response);

$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}

$user_token = $xml->authenticationtoken;
$user_email = $xml->email;

echo $user_email;
echo $user_token;

?>

Это ответ в XML:

<?xml version="1.0" encoding="UTF-8"?>
<user email="[email protected]" id="2567053"thumb="https://secure.gravatar.com/avatar/somenumber"username="Admin" title="Admin" cloudSyncDevice=""authenticationToken="SomeToken" scrobbleTypes="">
<subscription active="1" status="Active" plan="lifetime">
<feature id="pass"/>
<feature id="sync"/>
<feature id="cloudsync"/>
<feature id="home"/>
</subscription>
<profile_settings auto_select_audio="1" auto_select_subtitle="0"default_audio_language="en" default_subtitle_language="en"/>
<username>Admin</username>
<email>[email protected]</email>
<joined-at type="datetime">2014-05-08 17:59:24 UTC</joined-at>
<authentication-token>SomeToken</authentication-token>
</user>

Теперь по какой-то причине, пока я могу извлечь любую другую переменную из XML, authenticationToken отказывается анализироваться когда я эхом user_token, это абсолютно пусто!

1

Решение

В соответствии с примерами PHP документов на SimpleXML:

Доступ к элементам в документе XML, которые содержат символы, не разрешенные в соглашении об именах PHP (например, дефис), может быть выполнен путем инкапсуляции имени элемента в фигурные скобки и апостроф.

Таким образом, вы можете получить к нему доступ так:

$user_token = $xml->{'authentication-token'};
1

Другие решения

Предоставленный вами ответ в формате XML не является допустимой строкой XML.
Мне не удалось разобрать его, пока я не добавил ‘>’ в конец тега ‘user’.
Кроме того, как уже упоминалось в предыдущем ответе, вам необходимо получить доступ к свойствам объекта, которые содержат специальные символы с фигурными скобками и одиночными кавычками:

$user_token = $xml->{'authentication-token'};

или вот так:

$auth_token = 'authentication-token';
$user_token = $xml->$auth_token;
0

По вопросам рекламы [email protected]