2016-08-19 71 views
0

我正在向政府网站申请验证税号。我得到了一个漂亮的嵌套XML响应,我现在非常沮丧,试图解析和访问数据。如何访问此PHP XML响应中的数据?

在essense这是响应:

<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关于列表和我例如不明白为什么第一个点被跳过。此外,为什么我无法直接访问'spot'而没有经过一段时间的声明并将其分配给列表?我所需要的值始终在结果集中的相同位置。就像我使用'$ result-> param [1] - > value [0] - > array [0] - > data-> value [1] - > {'string'};'它会抛出关于未定义的错误,但对我来说'步骤'看起来不错?对不起,如果我很困惑,只是想学习。谢谢 – Matt

+1

@Matt'each($ result)'返回当前迭代的一个数组,其值为'[$ key,$ value]'。而'list(,$ node)'只取这个值。 – JustOnUnderMillions