Доступ к узлу simpleXML по индексу prob! em - PullRequest
2 голосов
/ 23 января 2011

Я получаю XML-ответ, основанный на запросе, который я размещаю на сервере, и он на самом деле возвращает действительный набор результатов, которые я могу вывести на экран с помощью print_r (). Набор результатов выглядит следующим образом (редактировать: этоточная структура файла):

<root>  
     <main_node1>  
         <value1>one</value1>  
         <value2>two</value2>  
     </main_node1>  
     <main_node2>  
         <anothervalue>whatever</anothervalue>  
     </main_node2>  
     <recordset>  
        <record>  
            <value1>one</value1>  
            <value2>two</value2>  
        </reocrd>  
        <record>  
            <value1>one</value1>  
            <value2>two</value2>  
        </reocrd>  
        <record>  
            <value1>one</value1>  
            <value2>two</value2>  
        </reocrd>  
     </recordset>  
</root>

когда я использую строку:

$xml = simplexml_load_string($xmlRequest);
$records = $xml->recordset->record;  

Я могу без проблем пройти по массиву $ records с циклом foreach, когдаЯ пытаюсь получить доступ к определенной записи в наборе записей, используя такой индекс, как

$record = $xml->recordset->record[$index];  

Я получаю пустое значение обратно.Я также попытался преобразовать результат в (массив), но пока безуспешно.

В каждом документе, который я просматривал в отношении simpleXML, говорится, что можно получить доступ к узлу XML по индексу, может кто-нибудь сказать мне, что я могу делать не так здесь?пока не в корне документа, я могу использовать нотацию $ xml-> recordset-> record, чтобы загрузить список записей в мою переменную $ records и распечатать его с помощью цикла foreach.

Ответы [ 3 ]

1 голос
/ 23 января 2011

Я решил свою проблему с помощью

$records = $xml->xpath('//record'); 

и я теперь могу получить доступ к любой записи по их индексу.

Спасибо за попытку, я ценю ваши усилия.

0 голосов
/ 01 апреля 2011

Другой способ сделать это без использования xpath:

Используя это как базу:

 $record = $xml->recordset->record[$index];

Вы должны сделать индекс как int, по какой-то причине просто получить его неРабота.Итак:

$index = trim($_GET['index']);
$index = intval($index);

Теперь это будет работать:

 $record = $xml->recordset->record[$index];

С наилучшими пожеланиями, RaphaelDDL

0 голосов
/ 23 января 2011

Вы ничего не получаете обратно, потому что узел 'recordset' является корнем вашей переменной $ xml (не уверен, правильно ли я это описываю).

Это должно работать:

<?php
    //Example xml, replace this with $xml = simplexml_load_string($xmlRequest);
    $xml = simplexml_load_string('<?xml version="1.0"?>
    <recordset><record><value1>one</value1><value2>two</value2></record>
    <record><value1>one</value1><value2>two</value2></record>
    </recordset>');

    $record = $xml->record[0];
    print_r ($record);

?>

...