2017-01-21 4 views
0

を動作していません情報を出してください。この情報はデータベースから得られ、fruitxml.phpというファイルにまとめられています。それはmy $contents変数から来るファイルです。のfile_get_contents XMLますforeachループは、このファイルは次のように連結された一連の文字列出力になっている

でもecho $xmlは何もしません。それは少なくとも機能するはずです。しかし、それはしません。空白の画面を表示している間違ったことは何ですか?

<?php 

    $contents = file_get_contents("http://localhost:8888/SSL/Week3/Activity%203-3/fruitxml.php"); 

    $xml = new SimpleXMLElement($contents); 

    echo $xml; 

    foreach($xml->fruits as $fruit) { 
     echo $fruit->fruitid . $fruit->fruitcolor . $fruit->fruitname . '.<br />'; 
    } ?> 

    <pre><?php var_dump($xml) ?></pre> 

私は私が言ったように、私はすべての情報が、JSON配列ではなく、私が望んでいたとして、文字列で取得し、var_dump()を使用

object(SimpleXMLElement)#1 (3) { 
    ["fruitid"]=> 
    array(5) { 
    [0]=> 
    object(SimpleXMLElement)#3 (1) { 
     ["id"]=> 
     string(1) "1" 
    } 
    [1]=> 
    object(SimpleXMLElement)#5 (1) { 
     ["id"]=> 
     string(1) "4" 
    } 
    [2]=> 
    object(SimpleXMLElement)#8 (1) { 
     ["id"]=> 
     string(1) "6" 
    } 
    [3]=> 
    object(SimpleXMLElement)#11 (1) { 
     ["id"]=> 
     string(1) "8" 
    } 
    [4]=> 
    object(SimpleXMLElement)#14 (1) { 
     ["id"]=> 
     string(1) "9" 
    } 
    } 
    ["fruitname"]=> 
    array(5) { 
    [0]=> 
    object(SimpleXMLElement)#2 (1) { 
     ["name"]=> 
     string(6) "Orange" 
    } 
    [1]=> 
    object(SimpleXMLElement)#6 (1) { 
     ["name"]=> 
     string(6) "Grapes" 
    } 
    [2]=> 
    object(SimpleXMLElement)#9 (1) { 
     ["name"]=> 
     string(5) "Apple" 
    } 
    [3]=> 
    object(SimpleXMLElement)#12 (1) { 
     ["name"]=> 
     string(10) "Grapefruit" 
    } 
    [4]=> 
    object(SimpleXMLElement)#15 (1) { 
     ["name"]=> 
     string(4) "Lime" 
    } 
    } 
    ["fruitcolor"]=> 
    array(5) { 
    [0]=> 
    object(SimpleXMLElement)#4 (1) { 
     ["color"]=> 
     string(6) "Orange" 
    } 
    [1]=> 
    object(SimpleXMLElement)#7 (1) { 
     ["color"]=> 
     string(6) "Purple" 
    } 
    [2]=> 
    object(SimpleXMLElement)#10 (1) { 
     ["color"]=> 
     string(3) "Red" 
    } 
    [3]=> 
    object(SimpleXMLElement)#13 (1) { 
     ["color"]=> 
     string(14) "Pinkish Orange" 
    } 
    [4]=> 
    object(SimpleXMLElement)#16 (1) { 
     ["color"]=> 
     string(5) "Green" 
    } 
    } 
} 

ここに、データベースから情報を取得するXMLファイルがあります。

<?php 

$dbh = new PDO("mysql:host=localhost;port=8889;dbname=ssl", "root", "root"); 

$sth = $dbh->prepare('SELECT fruitid, fruitname, fruitcolor FROM fruitapp'); 
$sth->execute(); 
$result = $sth->fetchall(); 

header("Content-type: application/xml"); 
$xmlfile = '<?xml version="1.0" encoding="UTF-8"?>'; 
$xmlfile .= "<fruits>"; 

foreach($result as $user) { 
    $xmlfile .= '<fruitid>'; 
    $xmlfile .= "<id>" . $user['fruitid'] . "</id>"; 
    $xmlfile .= '</fruitid>'; 
    $xmlfile .= '<fruitname>'; 
    $xmlfile .= "<name>" . $user['fruitname'] . "</name>"; 
    $xmlfile .= '</fruitname>'; 
    $xmlfile .= '<fruitcolor>'; 
    $xmlfile .= "<color>" . $user['fruitcolor'] . "</color>"; 
    $xmlfile .= '</fruitcolor>'; 
}; 

$xmlfile .= "</fruits>"; 

echo $xmlfile; 

$dom = new DOMDocument("1.0"); 
$dom->loadXML($xmlfile); 
$dom->save("myfruitxml.xml"); 

?> 
+0

*空白の画面*は何かが壊れていることを示します。これらの行を追加する 'ini_set( 'display_errors'、1); error_reporting(E_ALL); 'をPHPスクリプトの一番上に置き、エラーが発生するかどうかを確認してください。 –

+0

それを試してみてください。エラーはありません。ただ空白の画面。 –

+0

var_dump($ xml)の出力を表示してください – NineBerry

答えて

0

は、このようなXMLを生成します。

ドキュメントのルートノードは、SimpleXmlElement自体で表されます。したがって、$xml->fruitsを使用する必要はありません。 $xmlはすでに果物ノードを表します。

個々の果物にアクセスするには、それぞれ<fruit>ノードに配置します。

2つのネストノードに果物のプロパティを配置する必要はありません。プロパティごとに1つのノードを使用します。

たとえば、フルーツ名に<または&が含まれていると、構文エラーが発生しないように、特殊文字をエスケープするにはhtmlspecialcharsを使用します。

//コードがテストされていません

+0

ありがとうございます!あなたはこれを最初に理解し、実際に私のブラウザに何かを表示させる人です。私がしなければならなかったことを誰が知っていたのは私のXMLを単純化することでした。 –

+0

注:xmlを文字列として構築するのではなく、ここで説明するようにライブラリを使用する方がよいでしょう。http://stackoverflow.com/q/143122/101087 – NineBerry

-1

これは主にfile_get_contentsを使用しているためです(8888ポートが使用されているため)。

ではなくCURLの使用を検討し、それが動作するはずです:

foreach($xml->fruit as $fruit) { 
    echo $fruit->id . $fruit->color . $fruit->name . '.<br />'; 
} 

説明:このような

function escapeXml($input) 
{ 
    return htmlspecialchars($input, ENT_XML1, 'UTF-8'); 
} 

$xmlfile = '<?xml version="1.0" encoding="UTF-8"?>'; 
$xmlfile .= "<fruits>"; 

foreach($result as $user) { 
    $xmlfile .= '<fruit>'; 
    $xmlfile .= "<id>" . escapeXml($user['fruitid']) . "</id>"; 
    $xmlfile .= "<name>" . escapeXml($user['fruitname']) . "</name>"; 
    $xmlfile .= "<color>" . escapeXml($user['fruitcolor']) . "</color>"; 
    $xmlfile .= '</fruit>'; 
}; 

$xmlfile .= "</fruits>"; 

そして出力:

<?php 
$curl = curl_init('http://localhost/SSL/Week3/Activity%203-3/fruitxml.php'); 
curl_setopt($curl, CURLOPT_PORT, 8888); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 8888); 
$contents = curl_exec($curl); 

$xml = new SimpleXMLElement($contents); 

echo $xml; 

foreach($xml->fruits as $fruit) { 
    echo $fruit->fruitid . $fruit->fruitcolor . $fruit->fruitname . '.<br />'; 
} ?> 

<pre><?php var_dump($xml) ?></pre> 
+0

ええ、私のApacheはポート8888にあります。私のMySQLは8889にあります。 また、私はあなたがやったやり方を使っていて、まだ空白の画面です。 –

関連する問題