2016-08-19 2 views
0

나는 세금 번호를 확인하기위한 정부 웹 사이트에 요청하고 있습니다. 꽤 중첩 된 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 = 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"] [ ]; – 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->["param"][1]->["value"]->['array']->["data"]->["value"‌​][1]->['string']; 

감사 한 것입니다, 이것은 내가 원하는 코드를 얻을 불쌍한 내 솔루션입니다 추악하고 나쁜 XML 예제 파일이 여기 있습니다. :) 질문하시기 바랍니다.

+0

고마워요 - 네, 그게 아주 나쁜 결과이고, 머리를 꽤 많이 잃어 버렸습니다. 나는 내가 원하는 코드를 얻기 위해 당신의 진술을 '지미하게'관리했다. 나는 당신의 대답과 나의 '해결 방법'을 "충분하다"고 받아 들일 것이다 : D 감사 (잠시 후에 나의 '해결 방법'을 OP에 넣을 예정) – Matt

+0

JustOnUnderMillion -> 나는 '해결책'을 찾았습니다. , 이해가 안되는 것은 나를 괴롭 히고있다. 나는 목록에 대해 php.net을 읽고 있었고, 예를 들어 왜 첫 번째 지점을 생략했는지 이해하지 못합니다. 또한 왜 while 문없이 직접 '스팟'에 액세스하여 목록에 할당 할 수 없습니까? 원하는 값은 항상 결과 집합의 동일한 지점에 있습니다. $ result-> param [1] -> value [0] -> array [0] -> data-> value [1] -> { 'string'};과 같이 정의되지 않은 부분에 대해서는 에러가 발생하지만, 나에게 'steps'는 좋아 보인다? 죄송합니다. 혼란 스러우면 그냥 배우려고합니다. Thanks – Matt

+1

@Matt'each ($ result)'는 현재 반복의'[$ key, $ value]'와 같은 ley와 값을 가진 배열을 반환합니다. 그리고'list (, $ node)'는 그 값만 취합니다. – JustOnUnderMillions

관련 문제