Как извлечь значение из объекта XML?

Я пытаюсь напечатать значение из этого XML ($ xml), я пробовал каждый способ сделать это, но ничего.

Я использую веб-сервисы ASMX, поэтому мне пришлось проанализировать ответ объекта на XML, и я использовал XMLSerializer для этого.

Я просто хочу знать, что я делаю неправильно, чтобы напечатать одно значение из всего XML.

Вот мой код:

require_once('nusoap/lib/nusoap.php');
require_once 'xmlserializer/XML/Serializer.php';
$client = new SoapClient('https://omegasandbox.megasys.net:444/Client/WebServices/CustomerPortal.asmx?WSDL');
$token = $client->Login(array('clientNumber' => 'xxx', 'userName' => 'xxxxxx', 'password' => 'xxxxxxx'));

echo '<br><br>';

$realtoken = $token->LoginResult;
$summary = $client->GetAccountSummary(array('token'=>$realtoken, 'accountNumber' => 1111));
$summary = json_encode($summary);
$data = json_decode($summary, true);

// An array of serializer options.
$serializer_options = array (
'addDecl' => TRUE,
'encoding' => 'ISO-8859-1',
'indent' => '  ',
'rootName' => 'json',
'mode' => 'simplexml'
);

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
die($status->getMessage());
}

$xml = $Serializer->getSerializedData();

echo "echo xml <br><br>";
echo $xml;
echo "<br><br>";
echo "echo xml2<br><br>";
echo $xml2 =  htmlspecialchars_decode($xml);

Надеюсь, вы можете помочь мне, спасибо.


РЕДАКТИРОВАТЬ:

Наконец-то я разобрался с последним шагом. Вот окончательный код:

<?php
require_once('nusoap/lib/nusoap.php');
require_once 'xmlserializer/XML/Serializer.php';
$client = new SoapClient('https://omegasandbox.megasys.net:444/Client/WebServices/CustomerPortal.asmx?WSDL');
$token = $client->Login(array('clientNumber' => 'xxx', 'userName' => 'xxxxx', 'password' => 'xxxxxx'));

echo '<br><br>';

$realtoken = $token->LoginResult;
$summary = $client->GetAccountSummary(array('token'=>$realtoken, 'accountNumber' => 11111));
$summary = json_encode($summary);
$data = json_decode($summary, true);

// An array of serializer options.
$serializer_options = array (
'addDecl' => TRUE,
'encoding' => 'ISO-8859-1',
'indent' => '  ',
'rootName' => 'json',
'mode' => 'simplexml'
);

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
die($status->getMessage());
}

$xml = $Serializer->getSerializedData();

ob_start();
echo $xml;
$data = ob_get_contents();
ob_end_clean();
$order = simplexml_load_string(htmlspecialchars_decode($data));

//This was the final step.
echo $order->GetAccountSummaryResult[0]->any[0]->GetAccountSummary[0]->LoanAmount;
?>

Спасибо @Rasclatt за большую помощь.

-1

Решение

Предположительно результаты $xml в строковой форме (хотя, вероятно, это исходит от __toString() метод, а не строка, поэтому этот метод может не работать без предварительного вывода строки в буфер вывода (что, я уверен, не то, для чего предназначен класс), но вы можете использовать simplexml_load_string() в таком случае:

print_r(simplexml_load_string($xml));

Просто часть вашего изображения:

$xml = '<GetAccountSummary xmlns="">
<OpenDate>02/19/2016</OpenDate>
<LoanAmount>$15,000.00</LoanAmount>
<Tenn>48</Tenn>
<Frequency>Monthly</Frequency>
<Rate>23. 9900 %</Rate>
<PaymentAmount>$488.94</PaymentAmount>
<NextDueDate>03/19/2016</NextDueDate>
<NextAmountDue>$488.94</NextAmountDue>
<CurrentBalance>$15,000.00</CurrentBalance>
<UnpaidLateFees>$0.00</UnpaidLateFees>
<UnpaidOtherFees>$0.00</UnpaidOtherFees>
</GetAccountSummary>';

print_r(simplexml_load_string($xml));

Дает тебе:

SimpleXMLElement Object
(
[OpenDate] => 02/19/2016
[LoanAmount] => $15,000.00
[Tenn] => 48
[Frequency] => Monthly
[Rate] => 23. 9900 %
[PaymentAmount] => $488.94
[NextDueDate] => 03/19/2016
[NextAmountDue] => $488.94
[CurrentBalance] => $15,000.00
[UnpaidLateFees] => $0.00
[UnpaidOtherFees] => $0.00
)

Я уверен XML_Serializer класс имеет xml->array и / или xml->object поэтому вы захотите найти этот метод в файле (ах) этого класса.


РЕДАКТИРОВАТЬ
Я заметил, что вы выводите разметку, безопасную для браузера, на свою страницу, вам нужно расшифровать ее с помощью htmlspecialchars_decode():

$xml = $Serializer->getSerializedData();
ob_start();
echo $xml;
$data = ob_get_contents();
ob_end_clean();

$order = simplexml_load_string(htmlspecialchars_decode($data));
echo $order->OpenDate;
1

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

Других решений пока нет …

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