如何将XML解析为php?

10

如何将此转换为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>

我该如何在PHP中获得XML文件输出? - user1273874
您可以使用 DomDocument 创建和解析 XML。参见 http://php.net/manual/zh/class.domdocument.php。 - Philip
马克 - 27岁 - $5000 杰克 - 25岁 - $4000 纳夫 - 25岁 - $4000,我需要得到这样的输出 - user1273874
<?php $doc = new DOMDocument(); $doc->load( 'test1.xml' );
$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>"; } ?>
- user1273874
5个回答

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

// 输出结果如下 Mark - 27 - $5000 Jack - 25 - $4000 nav - 25 - $4000


3

我认为你的XML缺少根节点,因此解析会停滞。不过,除了这个问题以外,可以尝试使用simplexml_load_file和simplexml_load_string来访问XML数据,这两种方法是在PHP中访问XML最简单的方式。

在你的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
                )
        )
)

它可以工作,但我需要输出如下: Mark - 27 - $5000 Jack - 25 - $4000 nav - 25 - $4000 - user1273874
你只需要按照格式输出即可:foreach ($x[employee] as $employe){ echo $employe['name'] .' - ' . $employe['age'] . ' - ' . $employe['salary'] . ' ';} - grifos
如何为此xml的输出添加CSS? <?php $doc = new DOMDocument(); $doc->load( 'test1.xml' );
$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>"; } ?>
- user1273874

3

马克 - 27岁 - 5000美元 杰克 - 25岁 - 4000美元 纳夫 - 25岁 - 4000美元,我需要获得类似这样的输出 - user1273874

3

<?php $doc = new DOMDocument(); $doc->load( 'test1.xml' );
$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>"; } ?>
- user1273874

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接