Как разобрать XML в php? - PullRequest
10 голосов
/ 26 марта 2012

Как преобразовать это в вывод 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>

Ответы [ 5 ]

20 голосов
/ 12 апреля 2012
<?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>";
  }
?> 

// выход поставлен как этот Марк - 27 - 5000 $ Джек - 25 - 4000 $ nav - 25 - 4000

3 голосов
/ 26 марта 2012

Вы можете увидеть это обсуждение: Вы можете найти ответ там:

Лучший анализатор XML для PHP

А если вы ищете решение в CodeIgniter. Эта пара ссылок может помочь

  1. Разбор XML-файлов с использованием CodeIgniter?
  2. http://blog.insicdesigns.com/2009/03/parsing-xml-file-using-codeigniters-simplexml-library/
3 голосов
/ 26 марта 2012

Думаю, что в вашем XML отсутствует корневая запись, поэтому синтаксический анализ будет продолжаться. Тем не менее, эта проблема в стороне, ищите simplexml_load_file и simplexml_load_string. Это самые простые способы доступа к XML в структуре в стиле PHP.

В вашем примере XML я вставил общую запись 'records'. Например:

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

Функция подавлена ​​предупреждением, так как вы, вероятно, не хотите предупреждений проверки. В любом случае, на этом этапе проанализированный XML будет выглядеть так:

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
                )
        )
)
3 голосов
/ 26 марта 2012

Я не совсем понял ваш вопрос, но если вы хотите разобрать xml с помощью php, вы можете использовать расширение xml: http://php.net/manual/en/book.xml.php

После этого вы сможете распечатать данные по своему вкусу

0 голосов
/ 28 марта 2012

@ pp19dd говорит, что вы пропустили корневой узел, ваш текущий xml недействителен.

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

Разобрать с DomDocument и скомпилировать во временный массив

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

Вывод в представление (список / таблица)

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...