如何从 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;
我正在尝试从这个 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;