2012-03-26 13 views
9

Wie konvertiert man dies in PHP-Ausgabe?Wie XML in PHP zu analysieren?

<?xml version="1.0" encoding="iso-8859-1"?>  
    <employee> 
      <name>Mark</name> 
      <age>27</age> 
      <salary>$5000</salary> 
      </employee> 
      <employee> 
      <name>Jack</name> 
      <age>25</age> 
      <salary>$4000</salary> 
      </employee> 
      <employee> 
      <name>nav</name> 
      <age>25</age> 
      <salary>$4000</salary> 
    </employee> 
+0

bedeutet, wie ich XML-Datei-Ausgabe in PHP bekam? –

+0

Sie können DomDocument zu erstellen und zu analysieren xml http://php.net/manual/en/class.domdocument.php – Philip

+0

Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000, ich muss bekommen Ausgabe wie folgt –

Antwort

18
<?php 
$doc = new DOMDocument(); 
$doc->load('test1.xml');//xml file loading here 

$employees = $doc->getElementsByTagName("employee"); 
foreach($employees as $employee) 
{ 
    $names = $employee->getElementsByTagName("name"); 
    $name = $names->item(0)->nodeValue; 

    $ages= $employee->getElementsByTagName("age"); 
    $age= $ages->item(0)->nodeValue; 

    $salaries = $employee->getElementsByTagName("salary"); 
    $salary = $salaries->item(0)->nodeValue; 

    echo "<b>$name - $age - $salary\n</b><br>"; 
    } 
?> 

// the out Setzen Sie diese Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000

3

Ich habe nicht wirklich Ihre Frage, aber f Sie xml mit PHP analysieren möchten, können Sie die XML-Erweiterung verwenden: http://php.net/manual/en/book.xml.php

Sie werden aus den Daten drucken können, um dann

mögen
+0

Mark hinzugefügt - 27-5000 $ Jack - 25-4000 $ nav - 25-4000 $ ich brauche eine Ausgabe wie diese –

3

Sie können diese Diskussion sehen: Sie die Antwort dort finden können:

Best XML Parser for PHP

Und wenn Sie Suche nach der Lösung in CodeIgniter. Diese paar Links könnten

  1. Parsing XML files using CodeIgniter?
  2. http://blog.insicdesigns.com/2009/03/parsing-xml-file-using-codeigniters-simplexml-library/
+0

laden ('test1.xml'); $ mitarbeiter = $ doc-> getElementsByTagName ("mitarbeiter"); foreach ($ Mitarbeiter als $ Mitarbeiter) { $ Namen = $ Mitarbeiter-> getElementsByTagName ("Name"); $ name = $ name-> item (0) -> nodeValue; $ alters = $ angestellter-> getElementsByTagName ("Alter"); $ age = $ alters-> item (0) -> nodeValue; $ Gehälter = $ Mitarbeiter-> getElementsByTagName ("Gehalt"); $ Gehalt = $ Gehälter-> Artikel (0) -> nodeValue; echo "$ name - $ age - $ salary \ n
"; } ?> –

3

helfen Denken Sie Ihre XML ist ein Root-Eintrag fehlt, so wird, Parsing bleiben. Abgesehen von diesem Problem suchen Sie nach simplexml_load_file und simplexml_load_string. Dies sind die einfachsten Möglichkeiten, auf XML in einer PHP-ähnlichen Struktur zuzugreifen.

In Ihrem XML-Beispiel habe ich einen allgemeinen 'records'-Eintrag eingefügt. Zum Beispiel:

$t = <<< EOF 
<?xml version="1.0" encoding="iso-8859-1"?>  
<records> 
    <employee> 
      <name>Mark</name> 
      <age>27</age> 
      <salary>$5000</salary> 
    </employee> 
    <employee> 
      <name>Jack</name> 
      <age>25</age> 
      <salary>$4000</salary> 
    </employee> 
    <employee> 
      <name>nav</name> 
      <age>25</age> 
      <salary>$4000</salary> 
    </employee> 
</records> 
EOF; 

$x = @simplexml_load_string($t); 

print_r($x); 

Funktion ist Warnung-unterdrückt, da Sie wahrscheinlich keine Validierungswarnungen möchten. Wie auch immer, an dieser Stelle, die analysiert XML wird wie folgt aussehen:

SimpleXMLElement Object 
(
    [employee] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [name] => Mark 
        [age] => 27 
        [salary] => $5000 
       ) 
      [1] => SimpleXMLElement Object 
       (
        [name] => Jack 
        [age] => 25 
        [salary] => $4000 
       ) 
      [2] => SimpleXMLElement Object 
       (
        [name] => nav 
        [age] => 25 
        [salary] => $4000 
       ) 
     ) 
) 
+0

es funktioniert, aber ich brauche Ausgabe wie; Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000 –

+0

Sie müssen nur mit Ihrer Formatierung Echo: 'foreach ($ x [Mitarbeiter] als $ employee) {echo $ employee ['Name']. ' - ". $ employ ['Alter']. "-". $ employ ['Gehalt']. '';} ' – grifos

+0

Wie gebe ich CSS zur Ausgabe dieses xml ??; laden ('test1.xml'); $ mitarbeiter = $ doc-> getElementsByTagName ("mitarbeiter"); foreach ($ Mitarbeiter als $ Mitarbeiter) { $ Namen = $ Mitarbeiter-> getElementsByTagName ("Name"); $ name = $ name-> item (0) -> nodeValue; $ alters = $ angestellter-> getElementsByTagName ("Alter"); $ age = $ alters-> item (0) -> nodeValue; $ Gehälter = $ Mitarbeiter-> getElementsByTagName ("Gehalt"); $ Gehalt = $ Gehälter-> Artikel (0) -> nodeValue; echo "$ name - $ age - $ salary \ n
"; } ?> –

0

@ pp19dd sagt Ihr einen Wurzelknoten fehlt, wird Ihre aktuelle xml ist in-gültig.

<?xml version="1.0" encoding="iso-8859-1"?> 

    <document> 
     <employee> 
      <name>Mark</name> 
      <age>27</age> 
      <salary>$5000</salary> 
     </employee> 
     <employee> 
      <name>Jack</name> 
      <age>25</age> 
      <salary>$4000</salary> 
     </employee> 
     <employee> 
      <name>nav</name> 
      <age>25</age> 
      <salary>$4000</salary> 
     </employee> 
    </document> 

Parse mit DomDocument und Übersetzen in eine temporäre Array

$dom = new DOMDocument(); 

$dom->load('data.xml'); 

$employees = $dom->getElementsByTagName('employee'); 

foreach($employees as $employee) 
{ 
    $names = $employee->getElementsByTagName("name"); 
    $name = $names->item(0)->nodeValue; 

    $ages = $employee->getElementsByTagName("age"); 
    $age = $ages->item(0)->nodeValue; 

    $salaries = $employee->getElementsByTagName("salary"); 
    $salary = $salaries->item(0)->nodeValue; 

    $tmp[] = array(
     'name' => $name, 
     'age' => $age, 
     'salary' => $salary 
    ); 
    continue; 
} 

Ausgabe in einer Ansicht (list/table)

<table> 
<tbody> 
    <?php foreach($tmp as $staff):?> 
    <tr> 
     <td><?php echo $staff['name'];?></td> 
     <td><?php echo $staff['age'];?></td> 
     <td style="color:red;"><?php echo $staff['salary'];?></td> 
    </tr> 
    <?php endforeach;?> 
</tbody> 
</table>