2016-12-23 7 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'의 속성이 아닌 별도의 요소 여야합니다 (예 : ')? – Barmar

답변

1

몇 가지 눈에 띄는. 첫째, 당신은이 라인에 구문 오류가 있습니다..

$element = $xml->createElement("ID", ($row[38])); ($row[38] 주위에 잘못된 괄호에주의를 createElement 방법은 두 번째 매개 변수에 대한 문자열을 사용

둘째, 당신은에 ID를 추가하지 않을 당신이 @Barmar 댓글을 달았 같은 속성으로 필요한 경우 제품하지만 루트 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); 
    } 
} 

, 당신은 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"는 여전히 null입니다. 배열은 print_r을 사용하여 확인할 수있는 값을 가지고 있습니다. 배열의 예는 다음과 같습니다. – pommi