2017-08-02 1 views
0

Ich bin neu in PHP.php parse xml get element gleicher Attributwert

Also, ich möchte xml von URL analysieren wie:

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

Also, ich war es versuchen, aber hier hat i Problem:

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 
} 

}

Wie pasre Es ist John, um alle img mit Attribut zu bekommen?

Vielen Dank für das Lesen!

+0

jede Zeile in einem Array setzen, eine Schleife über das Array, wo 'emp_name = "John"' –

Antwort

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

Ich versuche, „emp_detail- $ Rückkehr war > emp-> img; " in foreach. Aber zeig nichts. – 1234abcd

+0

Forgot to add/img. Siehe mein Update. – akond

+0

Immer noch so. Ist das falsch mit "return $ emp_detail-> emp-> img;" in foreach? – 1234abcd

0

Verwenden XPath XPath-Ausdrücke für Bedingungen gestatten:

$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

Es wird null angezeigt. Ich habe versucht "return $ emp_detail-> emp-> img;" in foreach. Aber zeig nichts. – 1234abcd

+0

Eigentlich habe ich es mit Ihrem XML getestet und die erwartete Ausgabe erhalten. Vielleicht ist hier ein Fehler beim Laden der XML oder der XML ist anders (enthält einen Namespace). – ThW