2017-08-03 72 views
0

我是新的php。php xml獲取元素使用屬性值

我想從URL解析emp_test.xml像:

<?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> 

要獲得所有IMG擁有的屬性是約翰:

$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:

john_1.jpg 

如何獲得所有IMG一直屬性約翰喜歡?

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_1.jpg。我錯過了什麼嗎? – 1234abcd

+0

你是第一次迭代返回。所以它會返回第一個。得到它了? – vel

+0

你必須在循環中進行協調。那麼在for循環之外,你應該返回 – vel