2016-08-19 2 views
0

Я делаю запрос на веб-сайт gov't для проверки номера налога. Я получаю довольно вложенный XML-ответ, и в настоящий момент я очень расстроен, пытаясь разобрать и получить доступ к данным.Как получить доступ к данным в этом ответе PHP XML?

В Ессенции это ответ:

<params> 
    <param> 
     <value><array><data> 
      <value><string>UstId_1</string></value> 
      <value><string>SOMETAXNUM</string></value> 
     </data></array></value> 
    </param> 
    <param> 
     <value><array><data> 
      <value><string>ErrorCode</string></value> 
      <value><string>200</string></value> 
     </data></array></value> 
    </param> 
    <param> 
     <value><array><data> 
      <value><string>UstId_2</string></value> 
      <value><string>SECONDTAXNUM</string></value> 
     </data></array></value> 
    </param> .... 

</params> 

я анализирую результат с new SimpleXMLElement().

Но у меня нет успеха в доступе к тому, что мне действительно нужно ... И мне нужен ответ «ErrorCode» (в данном случае его 200).

Это то, что я имел

$xml->["param"][1]->["value"]->['array']->["data"]->["value"‌​][1]->['string']; 

Благодаря ответ я получил, это мое плохое решение, чтобы получить код я хотел:

 $xml = simplexml_load_string($xml_string); 
     $result = $xml->xpath('param'); 

     $count = 0; 
     while(list(, $node) = each($result)) { 
      if ($count == 1){ 
       return (string)$node->value[0]->array[0]->data->value[1]->{'string'}; 
      } 
      $count ++; 
     } 
+0

Покажите нам свою неудачную попытку выяснить, можем ли мы спасти что-либо от этого. – Script47

+0

$ xml -> ["param"] [1] -> ["value"] -> ['array'] -> ["data"] -> ["value"] [1] -> ['string' ]; – Matt

+0

Пожалуйста, положите его в свой OP. – Script47

ответ

1
#With something like this 

$xml = simplexml_load_string ($xmlstring); 
$result = $xml->xpath('param'); 

while(list(, $node) = each($result)) { 
    echo (string)$node->value[0]->array[0]->data->value[0]->{'string'};#UstId_1 
} 

Кстати, очень уродливый и плохой файл примера XML, который у вас есть здесь. :) Пожалуйста, из xml litte лучше в вопросе.

+0

Спасибо. Да, это очень плохой результат, и я потерял довольно много волос, пытаясь понять это. Мне удалось «выставить» ваше заявление, чтобы получить код, который я хочу. Я соглашусь с вашим ответом и моим «обходным решением» как «достаточно хорошим»: D Спасибо (собираюсь через минуту установить «обход» в OP) – Matt

+0

JustOnUnderMillion -> Я очень рад, что нашел «решение», , но не понимая, что это подслушивает меня. Я читал на php.net о списках, и я, например, не понимаю, почему первое место было пропущено. Также почему я не могу получить доступ к «пятну» напрямую без инструкции while и присвоить ее списку? Желаемое значение, которое мне нужно, всегда находится в одном и том же месте в результирующем наборе. Например, если я использую '$ result-> param [1] -> value [0] -> array [0] -> data-> value [1] -> {'string'};' он выдает ошибки об неопределенных, но мне «шаги» выглядят прекрасно? Извините, если я запутался, просто пытаюсь учиться. Спасибо – Matt

+1

@Matt 'each ($ result)' возвращает массив с ley и значением, как '[$ key, $ value]' текущей итерации. И 'list (, $ node)' принимает только значение этого. – JustOnUnderMillions