я получаю ответ XML от API следующим образом:Echo значение узла XML ребенка на основе значения атрибута узла
$response = <<<XML
<response uri="/crm/private/xml/Leads/insertRecords">
<result>
<message>Record(s) updated successfully</message>
<recorddetail>
<fl val="Id">1203498000000109001</fl>
<fl val="Created Time">2014-09-24 09:19:44</fl>
<fl val="Modified Time">2014-09-24 11:38:08</fl>
<fl val="Created By"><!--[CDATA[Brydges]]--></fl>
<fl val="Modified By"><!--[CDATA[Brydges]]--></fl>
</recorddetail>
</result>
</response>
XML;
Если я хочу сообщение, это, кажется, достаточно просто с помощью
$xml_response = new SimpleXMLElement($response); $message = $xml_response->result->message; echo $message;
Однако я пытаюсь получить содержимое строки <fl val="id">
, например 1203498000000109001.
Я посмотрел на многие вопросы на SO и попытался все следующие, которые предлагаются, но без успеха:
//using xpath with SimpleXMLElement
$xml_response = new SimpleXMLElement($response);
$zoho_id = $xml_response->xpath('/response/result/recorddetail/fl[@val="Id"]');
echo $zoho_id;
//using xpath with simplexml_load_string
$xml_response = new simplexml_load_string($response);
$zoho_id = $xml_response->xpath('/response/result/recorddetail/fl[@val="Id"]');
echo $zoho_id;
//using a foreach loop
$xml_response = new SimpleXMLElement($response);
foreach ($xml_response->result->recorddetail->fl as $fl) {
if ((string) $fl['val'] == 'Id') {
echo (string) $fl;
}
}
// using a foreach loop and then a switch case over the val attribute value to only echo Id
foreach ($xml_response->result->recorddetail->fl as $fl) {
switch((string) $fl['val']) { // Get attributes as element indices
case 'Id':
echo (string)$fl, ' is the Id';
break;
}
}
Любые предложения, как я могу восстановить содержание я требую?
СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ Призраки'S:
print_r ($ DOC) возвращает:
SimpleXMLElement Object (
[@attributes] => Array (
[uri] => /crm/private/xml/Leads/insertRecords
)
[result] => SimpleXMLElement Object (
[message] => Record(s) updated successfully
[recorddetail] => SimpleXMLElement Object (
[FL] => Array (
[0] => 1203498000000109001
[1] => 2014-09-24 09:19:44
[2] => 2014-09-24 13:06:37
[3] => SimpleXMLElement Object (
[@attributes] => Array (
[val] => Created By
)
)
[4] => SimpleXMLElement Object (
[@attributes] => Array (
[val] => Modified By
)
)
)
)
)
)
Спасибо Дух. Однако первый пример разбивает весь скрипт (кажется, что он должен делать с [0] в конце в соответствии с проверкой Dreamweaver, а второй не работает ни боюсь. Кроме того, если я удалю [0] из первый пример, а затем попробуйте следующее. Я получаю неожиданные результаты: '$ xml_response = new SimpleXMLElement ($ response); $ zoho_id = (string) $ xml_response-> xpath ('/response/result/recorddetail/fl [@val = «Id»] '); var_dump ($ zoho_id);' – JBReading
@JBЧтобы на основании вашего примера, это был рабочий, здесь [ознакомьтесь с демонстрацией] (http://codepad.viper-7.com/Etav19) – Ghost
@ JB Прочитайте, если, конечно, (что не имеет смысла) тот, который вы отправили на вопрос, который я тестировал, на самом деле не был xml, с которым вы работаете с – Ghost