2014-07-16 2 views
0

저는 지금 당장 가지고있는 XML 파일의 내용에 따라 새로운 XML 파일을 작성하는 코드를 작성했습니다. 내가 읽는 XML 파일에는 3 ~ 4 개의 노드가있는 14 개의 조각이 있습니다.이 경우에는 각각 7 개의 새 XML 파일이 있어야합니다. 각 파일에는 첫 번째 파일의 2 개 조각이 들어 있습니다. 쓰기 후에 모든 xml 파일에는 각각 2 개의 조각이 있어야하며, 모든 파일을 결합 할 때 14 개의 조각으로 합계됩니다.PHP에서 XML 파일 작성시 문제가 발생했습니다

그러나 코드가 나에게 다음과 같은 올바른 출력

을 부여되지는 다음 코드

<?php 
$docOutput = new DOMDocument("1.0"); 

$root = $docOutput ->createElement("data"); 
$docOutput ->appendChild($root); 
if(!$xml=simplexml_load_file('xmlfile.xml')){ 
trigger_error('Error reading XML file',E_USER_ERROR); 
} 
$array1=array(); 
$x=0; 
foreach($xml as $syn) 
{ 

for($i=$x*2;$i<($x+1)*2;$i++) 
{ 
//$array1[] = $syn->productId; 
echo $i; 
echo "<br />"; 
echo $syn->productId; 
$id = $docOutput ->createElement("PID"); 
$idText = $docOutput ->createTextNode($syn->productId); 
$id->appendChild($idText); 

$title = $docOutput ->createElement("PNAME"); 
$titleText = $docOutput ->createTextNode($syn->productname); 
$title->appendChild($titleText); 


$book = $docOutput ->createElement("Product"); 
$book->appendChild($id); 
$book->appendChild($title); 

$root->appendChild($book); 


} 
$docOutput ->formatOutput = true; 
echo "<xmp>". $docOutput ->saveXML() ."</xmp>"; 

$docOutput ->save("mybooks$x.xml") or die("Error"); 

$x++; 

} 
//echo count($array1, COUNT_RECURSIVE); 
?> 

입니다

<?xml version="1.0"?> 
<data> 
    <Product> 
    <PID>SGLDN7XJ2FPZH8G8</PID> 
    <PNAME>Miami Blues Aviator Sunglasses</PNAME> 
    </Product> 
</data> 

을 읽는 메신저 파일의 한 조각, 14 제품이되어있다 내가 읽는 im.Read에서 파일에 조각을 각각 두 조각으로 7 파일을 얻어야한다.

코드

+0

당신은 무엇을 추가 할 수 이것은 SimpleXMLIterator와 함께 작동 귀하의 코드는 현재 반환합니까? –

+0

14 개의 새 파일로 반환되지만 각 파일의 제품 조각이 2 씩 증가합니다. 첫 번째 파일에는 2 개의 조각이 있고 두 번째 조각에는 4 개가 있으므로 마지막 조각과 마지막 조각에는 28 개의 조각이 있습니다. 잘못된 조각입니다. 모든 파일은 2 개의 단편으로 만 구성되어야합니다. – user3843585

+0

문제점은 내부 루프'for ($ i = $ x * 2; $ i <($ x + 1) * 2; $ i ++)'입니다. 당신이 출력물에서 볼 수있는 것과 똑같이 할 수 있습니다. 하나의 루프를 사용하는 것이 더 쉽습니다. 여기서는 바깥 쪽 foreach입니다. 정확히 내 대답을 참조하십시오. – hakre

답변

0

당신이있어 문제를 수정에 도와주세요하면 XML을 작성하지만, 더 바로 기본 루프 로직/읽을 수있는 코드를 적습니다.

실제로 제품 노드를 반복하면서 앞의 반복을 이동하여 두 제품 요소를 함께 배치 할 수 있습니다.

$xml = simplexml_load_string($buffer, 'SimpleXMLIterator'); 

foreach ($xml as $product) { 

    // output current element 
    printf("-+-%s\n", $product->asXML()); 

    // move to next element 
    $xml->next(); 
    $product = $xml->current(); 

    // output next element 
    printf(" \- %s\n\n", $product->asXML()); 
} 

이 XML 입력으로 :

<?xml version="1.0"?> 
<data> 
    <Product>1</Product> 
    <Product>2</Product> 
    <Product>3</Product> 
    <Product>4</Product> 
</data> 

예제의 출력 :

-+-<Product>1</Product> 
\- <Product>2</Product> 

-+-<Product>3</Product> 
\- <Product>4</Product> 

온라인 - 데모 : https://eval.in/172918

+0

아니요, 어떻게 각 파를 2-2 파편으로 다른 파일에 쓸 수 있습니까? 그걸 안내해주세요 – user3843585

+0

예, 예! 정확히 그런 식으로, 선생님! 2-2 단편은 목록에 있습니다. 눈을 뜨고 출력물을 응시하십시오! Alternative는 iterator의 iterator에서 페이지 매김 (페어링)을 캡슐화합니다. 예를 들어 ** LimitIterator **를 사용하면 SPL에 있습니다. – hakre

+0

다른 xml 파일에 저장하는 방법에 대해 묻습니다. 그저 볼 수있는 파일을 인쇄 할 수 있습니다. – user3843585

관련 문제