2012-03-26 2 views
9

Come convertire questo in uscita php?Come analizzare XML in PHP?

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

significa come ho ottenuto l'output del file xml in php? –

+0

Puoi usare DomDocument per creare e analizzare xml http://php.net/manual/en/class.domdocument.php – Philip

+0

Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000, ho bisogno di ottenere output come questo –

risposta

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>"; 
    } 
?> 

// il fuori mettere come questo Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000

3

Io davvero non capisco la tua domanda, ma f si desidera analizzare XML utilizzando PHP, è possibile utilizzare l'estensione xml: http://php.net/manual/en/book.xml.php

Sarete quindi in grado di stampare i dati al vostro gradire

+0

Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000 I bisogno di ottenere output come questo –

3

si può vedere questa discussione: è possibile trovare la risposta c'è:

Best XML Parser for PHP

E se sei cercando la soluzione in CodeIgniter. Questi paio di link potrebbe aiutare

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

load ('test1.xml'); $ dipendenti = $ doc-> getElementsByTagName ("impiegato"); foreach ($ dipendenti come $ impiegato) { $ nomi = $ impiegato-> getElementsByTagName ("nome"); $ nome = $ nomi-> oggetto (0) -> nodoValore; $ anni = $ impiegato-> getElementsByTagName ("età"); $ età = $ età-> articolo (0) -> nodoValore; salari $ = $ dipendente-> getElementsByTagName ("salario"); $ salario = $ stipendi-> articolo (0) -> nodeValue; echo "nome $ - $ età - $ salario \ n
"; } ?> –

3

pensate che il vostro XML manca una voce principale, quindi, l'analisi si attacchi. Tuttavia, a parte questo problema, cerca simplexml_load_file e simplexml_load_string. Questi sono i modi più semplici per accedere a XML in una struttura in stile PHP.

Nel campione XML, ho inserito una voce generica "record". Ad esempio:

$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); 

La funzione è disattivata, poiché probabilmente non si desidera ricevere avvisi di convalida. In ogni caso, a questo punto, l'XML analizzato sarà simile a questa:

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

funziona ma ho bisogno di un output simile; Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000 –

+0

Devi solo echo con la tua formulazione: 'foreach ($ x [impiegato] come $ employe) {echo $ employe ['nome']. ' - '. $ employe ['età']. '-'. $ employe ['stipendio']. '';} ' – grifos

+0

Come dare CSS all'output di questo xml ??; load ('test1.xml'); $ dipendenti = $ doc-> getElementsByTagName ("impiegato"); foreach ($ dipendenti come $ impiegato) { $ nomi = $ impiegato-> getElementsByTagName ("nome"); $ nome = $ nomi-> oggetto (0) -> nodoValore; $ anni = $ impiegato-> getElementsByTagName ("età"); $ età = $ età-> articolo (0) -> nodoValore; salari $ = $ dipendente-> getElementsByTagName ("salario"); $ salario = $ stipendi-> articolo (0) -> nodeValue; echo "nome $ - $ età - $ salario \ n
"; } ?> –

0

@ pp19dd dice il tuo manca un nodo principale, il tuo xml corrente è valido.

<?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 con DomDocument e compilare in una matrice temporanea

$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; 
} 

uscita ad un (lista/tabella)

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