2017-11-28 20 views
0

그래서 XML 파일을 편집해야하는 코드 조각을 작성했습니다. 그러나 그것은 효과가없는 것처럼 보입니다. 모든 것을 검사했는데 모든 데이터가 통과 한 것 같지만 어떻게 든 노드를 업데이트하지 않습니다. xml 파일과 데이터를 생성하면 데이터가 추가됩니다. 하지만 어쨌든 나는 그것을 업데이트하는 것처럼 보일 수 없다.DOMDocument가 nodeValue를 업데이트하지 않습니다

if ($edit && isset($_POST["submit"])) { 
    $doc = new DomDocument('1.0'); 

    $doc->validateOnParse = true; 
    $doc->load('data.xml');   
    $message = getElementById($_GET["id"], $doc); 
    $message->getElementsByTagName("title")->nodeValue = 'hey'; 
    $message->getElementsByTagName("content")->nodeValue = $_POST["content"]; 
    $target = $message->getElementsByTagName("target")->nodeValue = $_POST["target"]; 
    $date1 = $message->getElementsByTagName("startDate")->nodeValue = $_POST["date1"]; 
    $date2 = $message->getElementsByTagName("endDate")->nodeValue = $_POST["date2"]; 

    $doc->formatOutput = true; 
    $doc->save('data.xml'); 

} 

function getElementById($id, $doc) 
{ 
    $xpath = new DOMXPath($doc); 
    return $xpath->query("//*[@id='$id']")->item(0); 
} 

XML : 당신이 getElementsByTagName를 호출 할 때,이 태그의 이름과 일치하는 노드의 목록을 반환

<message id="5a1c301ae5429" top="12px" left="12px" duration="20"> 
<title>hey</title> 
<content>12345</content> 
<target>2</target> 
<startDate>27/11/2017 16:30</startDate> 
<endDate>27/11/2017 16:50</endDate> 
<media type="image" width="200px" height="200px" top="-20px" left="129px"> 
<uri> 
localhost/xml/uploads/4215c27edf5ff51aee0def29f84949be.jpg 
</uri> 
</media> 
</message> 
+0

저장하기 전에 xml 파일을로드하십시오. 모든 첫 번째 변경 사항은 무시됩니다. – Camille

+0

@Camille, 죄송합니다. 테스트에서 제거하는 것을 잊어 버렸지 만 문제는 아닙니다. – Dani

+0

date1과 date2는 없지만 StartDate와 endDate는 없습니다. – splash58

답변

1

. 당신은 내가 목록에서 첫 번째 노드를 가져 ->item(0)을 사용했습니다, 각 태그의 1이 그래서 당신이 값에 액세스 할 때마다, 당신은 ...

$message->getElementsByTagName("title")->item(0)->nodeValue = 'hey'; 

를 사용해야합니다.

요소에 액세스해야하는 모든 시간에 동일한 논리를 반복하십시오.