2016-12-23 5 views
1

CSVファイルからfgetcsvを使って多次元配列を作成しました。PHPからXMLへの配列

DOMDocumentとSimpleXMLの両方を使用して、私はCSVドキュメントのXMLファイルを作成しようとしています。

配列変数とXML変数が同じクラスファイル内の関数に渡されています。 XML文書は問題なく作成されていますが、配列からXMLに値が渡されることはありません。それは私が配列からprint_r配列と構造体と値がすべて正しい場合は、値を渡すことに反対する静的な値を使用してそれを動作します。

XMLに値を渡す前に 'htmlspecialcharacters'と 'encode_UTF8'を試しました。

コードの例を以下に示します。productは多次元配列です。

public function array_to_xml($product, &$xml) 
{ 

    foreach($product as $row) 
    {  
     $element = $xml->createElement("Product"); 
     $xml->appendChild($element); 

     $element = $xml->createElement("ID", ($row[38])); 
     $xml->appendChild($element); 
    } 
} 

明らかに問題はアレイですが、私は答えを見つけることができません。どんな助けでも感謝しています。

現在、出力は(IDエレメントの値ではない)ように見えます。一度それが働いている製品は約20の子要素を持っています。

<?xml version="1.0"?> 
    <ProductList/> 
     <Product> 
      <ID/> 
     </Product> 
    </ProductList> 

$行の例画面に出力:物事が目立つ

Array ([0] => [1] => [2] => 6/10/2016 [3] => [4] => [5] => 7.35 [6] => N [7] => N [8] => N [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 80 [15] => 0 [16] => 80 [17] => 0 [18] => 80 [19] => N [20] => N [21] => N [22] => N [23] => 236.50 [24] => 0.00 [25] => 4.86 [26] => AFG Home Loans - Alpha [27] => 100% Offset Lo Doc Fixed [28] => 100% Offset Lo Doc 4 Year Fixed Owner Occupied [29] => 250.00 [30] => [31] => 7.35 [32] => 0.00 [33] => 4.9 [34] => N [35] => 325.00 [36] => 48 [37] => 4.52 [38] => 1-1MX78TF [39] => N [40] => [41] => [42] => N [43] => N [44] => [45] => Y [46] => 0.00 [47] => 10,000.00 [48] => 2,000,000.00 [49] => Y [50] => 30 [51] => [52] => [53] => Y [54] => 0.00) 
+0

結果のXMLをどのように表示しますか? 'Product'要素に何も入れていません。 – Barmar

+1

あなたは 'htmlspecialchars'を使う必要はありません。必要に応じてライブラリーがあなたのエンコーディングを行います。 – Barmar

+1

IDは 'Product ID =" 100 ">'のように 'Product'の属性ではなく、別の要素であるべきですか? – Barmar

答えて

1

カップル。まず、あなたは、この行に構文エラーがあります。

$element = $xml->createElement("ID", ($row[38]));$row[38]周りに誤った括弧に注意しcreateElement方法は、その2番目のパラメータの文字列を受け取り

第二に、あなたにIDを追加していません。製品が、ルートXMLへ。あなたのコードがこれに近いはず、という固定。

public function array_to_xml($product, &$xml) 
{ 
    foreach ($product as $row) 
    {  
     $product= $xml->createElement("Product"); 
     $id = $xml->createElement("ID", $row[38]); 

     $product->appendChild($id); 
     $xml->appendChild($product); 
    } 
} 

@BarmarあなたはDOMElement->setAttribute()メソッドを使用したい、それが見える、コメントとしてあなたは属性として、それを必要とする場合like:

public function array_to_xml($product, &$xml) 
{ 
    foreach ($product as $row) 
    {  
     $product= $xml->createElement("Product"); 
     $product->setAttribute('ID', $row[38]); 

     $xml->appendChild($product); 
    } 
} 
+0

コメントDerekに感謝しますが、値を変更しません。この例では、属性「id」はまだヌルです。私は配列がprint_rで確認できる値を保持していることは知っていますが。配列の例は次のとおりです。 – pommi