如何从 xml 对象中提取值?

How to extract a value from an xml object?

我正在尝试从这个 XML ($xml) 中打印一个值,我尝试了所有方法,但没有成功。

我正在使用 ASMX Web 服务,所以我必须解析对 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 的大力帮助。

推测 $xml 的结果是一个字符串形式(虽然,它可能来自 __toString() 方法而不是真正的字符串,所以如果不将字符串输出到首先是一个输出缓冲区(我敢肯定,这不是 class 的意图)但是你可以在那个时候使用 simplexml_load_string():

print_r(simplexml_load_string($xml));

只是您图片的一部分:

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

print_r(simplexml_load_string($xml));

给你:

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

我确定 XML_Serializer class 有一个 xml->array and/or xml->object 所以你会希望它在 class 文件.


编辑 我注意到您正在将浏览器安全标记回显到您的页面,您需要使用 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;