2017-08-02 131 views
0

我是新的PHP。PHP解析XML獲取元素相同的屬性值

所以,我想從URL解析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> 

所以,我嘗試,但在這裏我有問題:

function get_empimg() { 
$url = 'https://...emp_test.xml'; 
$xml = simplexml_load_file("$url") or die("Error: Cannot create object"); 
foreach($xml->children() as $emp_detail) { 
    //do something in here; 
    //return img has attribute is John 
} 

}

如何pasre它獲得所有img屬性是約翰?

謝謝您的閱讀!

+0

把每行一個數組,循環數組其中'EMP_NAME = 「約翰」' –

回答

0
 $data2 = <<<'XML' 
<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; 


    $doc2 = new SimpleXMLElement($data2); 
    return array_map('strval', $this->doc2->xpath("//*[@emp_name='john']/img")); 
+0

我嘗試了「返回$ emp_detail- > EMP-> IMG;」在foreach。但不要展示一些東西。 – 1234abcd

+0

忘記加入/ img。查看我的更新。 – akond

+0

仍然如此。我錯了「return $ emp_detail-> emp-> img;」在foreach? – 1234abcd

0

使用XPath,Xpa​​th的表達式允許條件:

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath = new DOMXpath($document); 

foreach ($xpath->evaluate('//emp[@emp_name="john"]/img') as $img) { 
    var_dump($img->textContent); 
} 
+0

它顯示爲空。我試過「return $ emp_detail-> emp-> img;」在foreach。但不要展示一些東西。 – 1234abcd

+0

其實我用你的XML進行了測試,並得到了預期的輸出結果。也許這是你如何加載XML或XML是不同的(包含一個名稱空間)的錯誤。 – ThW