2012-03-26 19 views
9

¿Cómo convertir esto a php output?Cómo analizar XML en 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 cómo obtuve la salida de archivo xml en php? –

+0

Puede usar DomDocument para crear y analizar xml http://php.net/manual/en/class.domdocument.php – Philip

+0

Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000, necesito conseguir salida como esta –

Respuesta

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

// el cabo poner así Marca - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000

3

Realmente no entiendo su pregunta, pero f desea analizar XML usando PHP, puede utilizar la extensión xml: http://php.net/manual/en/book.xml.php

A continuación, será capaz de imprimir los datos a su gusto

+0

- 27 - $ 5000 Jack - 25 - $ 4000 de navegación - 25 - $ 4.000 l necesito para obtener una salida como ésta –

3

usted puede ver esta discusión: puede encontrar la respuesta allí:

Best XML Parser for PHP

Y si usted es buscando la solución en CodeIgniter. Estos par de enlaces podría ayudar

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

load ('test1.xml'); $ employees = $ doc-> getElementsByTagName ("employee"); foreach ($ employees as $ employee) { $ names = $ employee-> getElementsByTagName ("nombre"); $ name = $ names-> item (0) -> nodeValue; $ ages = $ employee-> getElementsByTagName ("edad"); $ edad = $ ages-> item (0) -> nodeValue; $ salarios = $ employee-> getElementsByTagName ("salario"); $ salario = $ sueldos-> elemento (0) -> nodeValue; echo "$ nombre - $ edad - $ salario \ n
"; } ?> –

3

piensa que su XML carece de una entrada de la raíz, por lo que, el análisis se pegará. Sin embargo, dejando de lado ese tema, busque simplexml_load_file y simplexml_load_string. Esas son las formas más simples de acceder a XML en una estructura de estilo PHP.

En su muestra de XML, he insertado una entrada genérica de 'registros'. Por ejemplo:

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

Se ha eliminado la advertencia de la función ya que probablemente no desee advertencias de validación. De todos modos, en este punto, el XML analizado se verá así:

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

funciona, pero necesito salidas como; Mark - 27 - $ 5000 Jack - 25 - $ 4000 nav - 25 - $ 4000 –

+0

Solo tiene que hacer eco con su formateo: 'foreach ($ x [employee] as $ employe) {echo $ employe ['name']. ' - '. $ employe ['age']. '-'. $ employe ['salario']. '';} ' – grifos

+0

Cómo dar CSS al resultado de este xml ??; load ('test1.xml'); $ employees = $ doc-> getElementsByTagName ("employee"); foreach ($ employees as $ employee) { $ names = $ employee-> getElementsByTagName ("nombre"); $ name = $ names-> item (0) -> nodeValue; $ ages = $ employee-> getElementsByTagName ("edad"); $ edad = $ ages-> item (0) -> nodeValue; $ salarios = $ employee-> getElementsByTagName ("salario"); $ salario = $ sueldos-> elemento (0) -> nodeValue; echo "$ nombre - $ edad - $ salario \ n
"; } ?> –

0

@ pp19dd dice que su falta un nodo raíz, el XML actual es en-válida.

<?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 y compilar en una matriz de temp

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

de salida a una vista (lista/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>