2012-03-26 15 views
9

これをPHPの出力に変換するには?XMLを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

は、PHPでxmlファイルの出力を得た方法を意味しますか? –

+0

DomDocumentを使用してXMLを作成して解析できます。http://php.net/manual/en/class.domdocument.php – Philip

+0

Mark-27 - $ 5000 ジャック - 25 - $ 4000 nav - 25 - $ 4000、私は取得する必要がありますこのような出力 –

答えて

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

//このように置く Mark - 27 - $ 5000 ジャック - 25 - $ 4000 nav - 25 - $ 4000

3

私は本当にあなたの質問を得ることはありませんが、あなたは、PHPを使用してXMLを解析したいfを、あなたは、XML拡張機能を使用することができます。http://php.net/manual/en/book.xml.php

あなたは、あなたのにデータをプリントアウトすることができます

+0

マーク追加した - 27から25 - - $ 4000 NAV - 25 - ジャック $ $ 5000 4000私はこの –

3

が好きあなたはこの議論を見ることができます:あなたはそこに答えを見つけることができます。

Best XML Parser for PHP

そして、あなたがしている場合CodeIgniterのソリューションを探しています。リンクのこれらのカップルが役立つかもしれない

  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($従業員$従業員) { $ 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; エコー "$ name - $ age - $ salary \ n
"; } ?> –

3

は解析がついてしまいます、あなたのXMLがルートエントリを欠いていると思うので。ただし、その問題は別として、simplexml_load_fileとsimplexml_load_stringを参照してください。これらは、PHPスタイルの構造でXMLにアクセスする最も簡単な方法です。

XMLサンプルでは、​​一般的な「レコード」エントリを挿入しました。例:

$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は次のようになります。pp19dd @

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

その作業ですが、出力が必要です。 $ 275 - $ 5000 ジャック - 25 - $ 4000 nav - 25 - $ 4000 –

+0

あなたの書式設定にエコーする必要があります:foreach($ x [employee] as $ employe){echo $ employe ['name']。 - '。 $ employe ['年齢']。 ' - ' $ employe ['salary']。 '';} ' – grifos

+0

このXMLの出力にCSSを与えるには?; <?php $ doc = new DOMDocument(); $ doc-> load( 'test1.xml'); $ employees = $ doc-> getElementsByTagName( "employee"); foreach($従業員$従業員) { $ 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; エコー "$ name - $ age - $ salary \ n
"; } ?> –

0

は、あなたがルートノードが欠落して言う、あなたの現在のXMLがで-有効です。アウトDOMDOCUMENTと

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

解析し、ビューに一時配列に

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