2017-03-09 2 views
1

현재 SimpleXML에 약간의 문제가 있습니다. 이유는 모르겠지만 XML 파일에 변경 사항을 저장하지 않는 이유가 있습니다.XPATH 결과를 편집해도 문서에 영향을주지 않습니다.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<KW10> 
    <dienstag date="07.03.2017"> 
    <arbeitszeit/> 
    <pausen/> 
    <kilometer/> 
    <fahrer/> 
    <hotel/> 
    <fahrtzeit_hin/> 
    <fahrtzeit_weg/> 
    <erledigt/> 
    </dienstag> 
    <mittwoch date="08.03.2017"> 
    <arbeitszeit/> 
    <pausen/> 
    <kilometer/> 
    <fahrer/> 
    <hotel/> 
    <fahrtzeit_hin/> 
    <fahrtzeit_weg/> 
    <erledigt/> 
    </mittwoch> 
    <donnerstag date="09.03.2017"> 
    <arbeitszeit/> 
    <pausen/> 
    <kilometer/> 
    <fahrer/> 
    <hotel/> 
    <fahrtzeit_hin/> 
    <fahrtzeit_weg/> 
    <erledigt/> 
    </donnerstag> 
    <freitag date="10.03.2017"> 
    <arbeitszeit/> 
    <pausen/> 
    <kilometer/> 
    <fahrer/> 
    <hotel/> 
    <fahrtzeit_hin/> 
    <fahrtzeit_weg/> 
    <erledigt/> 
    </freitag> 
    <samstag date="11.03.2017"> 
    <arbeitszeit/> 
    <pausen/> 
    <kilometer/> 
    <fahrer/> 
    <hotel/> 
    <fahrtzeit_hin/> 
    <fahrtzeit_weg/> 
    <erledigt/> 
    </samstag> 
    <sonntag date="12.03.2017"> 
    <arbeitszeit/> 
    <pausen/> 
    <kilometer/> 
    <fahrer/> 
    <hotel/> 
    <fahrtzeit_hin/> 
    <fahrtzeit_weg/> 
    <erledigt/> 
    </sonntag> 
    <montag date="06.03.2017"> 
     <arbeitszeit von="21:00" bis="05:00"/> 

     <kilometer/> 
     <fahrer is="true"/> 
     <hotel/> 
     <fahrtzeit_hin von="20:30" bis="20:45"/> 
     <fahrtzeit_weg von="05:15" bis="05:30"/> 
     <erledigt/> 
     <pausen> 
      <pause_0 von="23:30" bis="00:00"/> 
     </pausen> 
    </montag> 
</KW10> 

나는,

$xml = simplexml_load_file('users/'.$_SESSION['vorname'].$_SESSION['nachname'].'/'.$kw.'.xml'); 
$trees = $xml->xpath('//*[@date]'); 
usort ($trees, function($a, $b) { return strcmp($a['date'], $b['date']); }); 
echo '<pre>'; print_r($trees); echo '</pre>'; 
$xml->asXML('kwtest.xml'); 

출력은 잘하지만 어떤 이유로이 파일에 내 변경 사항을 저장하지 않습니다 (날짜) 순서로 평일을 얻을 수있는 XML 파일을 정렬 원 그것은 파일을 만들지 만 오래된 xml 트리를 가지고 있으므로 내 정렬 된 트리를 어떻게 든 적용해야합니다 (물론 덮어 씁니다).

여기에 답변이있는 사람이 있습니까?

+0

'$ 나무 = $ XML-> XPath를 수행 한 후 ('// * [날짜 @]는');''$의 trees'는 결과 배열입니다 '$ xml'에 연결되어 있지 않습니다. $ trees에서 실제 simple_xml 객체를 만들어야합니다. – JustOnUnderMillions

+0

'SimpleXMLElement :: xpath()'에 의해 반환 된'SimpleXMLElement' 객체의 배열이 원본'SimpleXMLElement'에 연결되어 있다는 것을 당연한 것으로 생각합니다. 문서는 그것에 대해 아무 말도하지 않으며 아마 너무 많은 가정 일 것입니다. –

+0

여기에 그 방법이 나와 있습니다 : http://stackoverflow.com/questions/23105465/how-to-update-xml-file-using-php 답변에서'// 오래된 요소를 새 것으로 바꾸십시오 ' – JustOnUnderMillions

답변

1

그래서 당신이 할 수있는 것입니다 :

//After creating sorted $trees generate a new xml 
$newXml = ''; 
foreach($trees as $t){ 
    $newXml .= $t->asXML().PHP_EOL; 
} 
#merge that with header and root-node 
$newXml = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?> 
<KW10> 
'.$newXml.' 
</KW10>'); 
#now it looks like 
echo '<pre>'; print_r(htmlentities($newXml->asXML())); echo '</pre>'; 
#save it, maybe unlink the old version before 
$newXml->asXML('kwtest.xml'); 
+0

부끄러움처럼 일했습니다. 감사합니다. – NoLand