2013-05-10 5 views
0

문제는 내가 XML에 쓸 때마다 루트 XML이 생성되고 있다는 것입니다. 주요 문제는 하위 설정 및 루트 정의입니다. Łza 의 도움을 받아 이제 루트 XML 노드는 무시됩니다. 그러면 하위를 설정하고 만든 다음 콘텐츠를 추가하십시오. 그리고 올바른 형식의 예가 있습니다.기존 XML에 노드 추가

$xml = simplexml_load_file('FILENAME.xml'); // Load XML File Need to add IF Statment to create if does not exist 

$result = $xml->addchild('Result'); // Ignore Root NODE and Add Child Results 

$result->addChild('Time', gmdate('D-M-Y -H:i:s')); // Rest of the below adds Child to Result and outputs results 
$result->addChild('Channel', $Site); 
$result->addChild('Type', '**'); 
$result->addChild('Process', $Status); 
$result->addChild('SKU', $code->SKU); 
$result->addChild('item', $item); 
$result->addChild('Status', '$Feedback'); 
$result->addChild('ErrorID', '$Error'); 
$result->addChild('Message', '$Message'); 

$xml->asXml('FILENAME.xml'); //Write to file would be 

// All of the above Code is using variables from another part of the script 

출력 대신 SimpleXMLElement 라이브러리 하드 XML 생성을 사용하는

<Root> 
    <Result> 
     <Time>Fri-May-2013 -09:15:22</Time> 
     <Channel>20</Channel> 
     <Type>**</Type> 
     <Process>Update</Process> 
     <SKU>98746524765</SKU> 
     <Item/> 
     <Status>Problem</Status> 
     <ErrorID>999-Error</ErrorID> 
     <Message>Unknown file format support</Message> 
    </Result> 
    <Result> 
     <Time>Fri-May-2013 -09:15:22</Time> 
     <Channel>20</Channel> 
     <Type>**</Type> 
     <Process>Update</Process> 
     <SKU>5412254785</SKU> 
     <Item/> 
     <Status>Problem</Status> 
     <ErrorID>123-Error</ErrorID> 
     <Message>Invalid Item</Message> 
    </Result> 
</Root> 

감사

+0

당신이 새로운 추가 하시겠습니까 :

$xml2 = simplexml_load_file('DHError.xml'); // to add new node <Result>: $resultNext = $xml2->data->addchild('Result'); $resultNext->addChild('Time', gmdate('D-M-Y -H:i:s')); $resultNext->addChild('Channel', $SiteID); //and save file $xml2->asXml('DHError.xml'); 

는 이것을 XML을 생성합니다

단순히 사용하는 파일을로드하려면 ''노드 아래의 노드 ''? 또한 당신은 하나의 또 다른 노드''을 가지고 있기 때문에. 그들 사이에 차이가 있습니까? – NullPointer

+0

죄송합니다. 내 바보 같은 실수입니다. 노드로 보내고 싶습니다. 나는 원래의 게시물을 편집 할 것입니다. – user1145101

+0

정확히 원하는 것을 간단히 설명 할 수 있습니까? 코드를 작성 했으므로 코드가 작동하지 않습니까? 또는 그것에 오류가 있습니까? – NullPointer

답변

0

시도 할 것이다. 이것은 어쩌면 처음부터 사용하는 것이 더 복잡 할 수도 있지만 훨씬 더 안전합니다 (xml을 하드 코딩 할 때 xml 구조에서 가능한 오류를 피하는 것). 사용하기 시작하면 쉽게 사용할 수 있습니다. 노드와 자식 노드를 쉽게 추가/제거 할 수 있습니다. 위의 코드

$xml = new SimpleXMLElement('<xml/>'); 

$data = $xml->addChild('data'); 
$result = $data->addChild('Result'); 
$result->addChild('Time', gmdate('D-M-Y -H:i:s')); 
$result->addChild('Channel', $SiteID); 

// ... and the same way create all your xml nodes. 
// if you want add next <result> node witch all elements repeat the code, (or put it in loop if you want more <result> elements): 
$result = $data->addChild('Result'); 
$result->addChild('Time', gmdate('D-M-Y -H:i:s')); 
$result->addChild('Channel', $SiteID); 

// and after create all nodes save the file: 
$xml->asXml('DHError.xml'); 

는 XML을 생성합니다 :

<xml> 
    <data> 
    <Result> 
    <Time>Fri-May-2013 -12:14:39</Time> 
    <Channel>data</Channel> 
    </Result> 
    <Result> 
    <Time>Fri-May-2013 -12:14:39</Time> 
    <Channel>data</Channel> 
    </Result> 
    </data> 
</xml> 

그게 전부

은 당신의 코드에 대한 예입니다. 당신이로드하고 XML을 처리해야하는 경우 그 다음은 쉬울 것이다 :

<?xml version="1.0" ?> 
<xml> 
    <data> 
    <Result> 
    <Time>Fri-May-2013 -12:27:24</Time> 
    <Channel>data</Channel> 
    </Result> 
    <Result> 
    <Time>Fri-May-2013 -12:27:24</Time> 
    <Channel>data</Channel> 
    </Result> 
    <Result> 
    <Time>Fri-May-2013 -12:27:24</Time> 
    <Channel>data</Channel> 
    </Result> 
</data> 
</xml> 
+0

고맙습니다. Load 문을 사용했으며 완벽하게 작동합니다. 그래서 IF XML Exists Load를 추가해야합니다. Create가 아닌 경우 :-) 시도했던 방법보다 훨씬 쉬운 방법입니다. 완벽하게 작동합니다. 대단히 감사합니다. – user1145101