2017-08-03 19 views
0

私はPHPで新しくできています。私はのようなURLからemp_test.xmlを解析するphp xml get要素使用属性値

:すべてのimg属性を持ってもらうために

<?xml version="1.0" encoding="utf-8"?> 
<all_emp> 
<emp_detail> 
    <emp emp_name="john"><img>john_1.jpg</img></emp> 
    <emp emp_name="john"><img>john_2.jpg</img></emp> 
    <emp emp_name="john"><img>john_3.jpg</img></emp> 
    <emp emp_name="marry"><img>marry_1.jpg</img></emp> 
    <emp emp_name="marry"><img>marry_2.jpg</img></emp> 
    <emp emp_name="david"><img>david_1.jpg</img></emp> 
</emp_detail> 
</all_emp> 

はジョンです:

$url = 'https://.../emp_test.xml'; 
$xml = simplexml_load_file("$url") or die("Error: Cannot create object"); 
foreach ($xml->xpath("//*[@emp_name='john']/img") as $node) 
{ 
    $img = (string) $node; 
    return $img; 
} 

私はXMLを解析することができます。

しかし、これはreultです:すべてのimg属性を持って取得する方法

john_1.jpg 

は次のようにジョンのですか?

john_1.jpg 
john_2.jpg 
john_3.jpg 

ありがとうございます。

+0

foreachの中で$ img。= $ nodeを試してください。 –

+0

@GabrielChiHongLee:それでもそうです。 john_1.jpgだけが表示されます。 – 1234abcd

答えて

0

このように使用できます。

  <?php 
    $url = '<?xml version="1.0" encoding="utf-8"?> 
    <all_emp> 
    <emp_detail> 
     <emp emp_name="john"><img>john_1.jpg</img></emp> 
     <emp emp_name="john"><img>john_2.jpg</img></emp> 
     <emp emp_name="john"><img>john_3.jpg</img></emp> 
     <emp emp_name="marry"><img>marry_1.jpg</img></emp> 
     <emp emp_name="marry"><img>marry_2.jpg</img></emp> 
     <emp emp_name="david"><img>david_1.jpg</img></emp> 
    </emp_detail> 
    </all_emp>'; 

    $xml = simplexml_load_string($url) or die("Error: Cannot create object"); 
    $imgstring =''; 
    foreach ($xml->emp_detail->emp as $node) 
    {  
     if (strpos((string) $node->img, 'john') !== false) { 
      $imgstring .= (string) $node->img.","; 
     } 


    } 

    print_r($imgstring); 
?> 
+0

私はあなたのコードに従います。 foreachループでは、 "$ img =(string)$ node-> emp-> img;"の後に "return $ img;"を追加します。しかし、emp_nameがjohn、marry、david、または任意の文字列に変更されると、常にjohn_1.jpgが表示されます。私は何かが恋しいですか? – 1234abcd

+0

あなたは最初の反復で戻ります。最初のものが返されます。とった? – vel

+0

ループでconcatinateする必要があります。 forループの外側では、 – vel

関連する問題