2009-07-10 4 views
0

XML 파일을 만들려고하는데 XML 파일을 노드에 래핑해야하므로 추가하기가 쉽지 않습니다.PHP의 읽기, 쓰기 및 추가를 알고 있지만 삽입 할 수 있습니까? 또는 마지막 줄을 제거 하시겠습니까?

위의 사항에 도움이 될 것입니다.

내 XML은 2 개 개의 다른 노드 유형으로 구성 :

<entry id="1_0"> 
    <title>This is the title</title> 
    <description>This is the description...</description> 
    <subName>Publishers Name</subName> 
    <date>Saturday, June 11th, 2007, 5:46:21 PM</date> 
    <BorF>bug</BorF> 
</entry> 

<vote id="1_0">5</vote> 

그리고 PHP 파일

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 


<script type="text/javascript" src="jquery-1.3.2.min.js"></script> 

<script> 

$(function(){ 


    $("#addVote").click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "saveListData.php", 
      data: 'url=bugs_features_listdata.xml&listData=\n<vote id="1_2">3</vote>', 
      async: false, 
      cache: false, 
      success: function(data, textStatus) { 
       if (window.console) console.log(textStatus); 
      }, 
      complete: function(XMLHttpRequest, textStatus){ 
       if (window.console) console.log(textStatus); 
      } 
     }); 
    }); 

    $("#addEntry").click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "saveListData.php", 
      data: 'url=bugs_features_listdata.xml&listData=\n<entry id="1_1">\n\ 
\t<title>This is the title 1</title>\n\ 
\t<description>This is the description...</description>\n\ 
\t<subName>Publishers Name</subName>\n\ 
\t<date>Saturday, June 11th, 2007, 5:46:21 PM</date>\n\ 
\t<BorF>bug</BorF>\n\ 
</entry>', 
      async: false, 
      cache: false, 
      success: function(data, textStatus) { 
       if (window.console) console.log(textStatus); 
      }, 
      complete: function(XMLHttpRequest, textStatus){ 
       if (window.console) console.log(textStatus); 
      } 
     }); 
    }); 


}); 

</script> 

</head> 

<body> 


<a id="addVote" href="#">ADD VOTE</a><br /><br /><a id="addEntry" href="#">ADD ENTRY</a> 


</body> 
</html> 

에 (현재 고정) 데이터를 전송하기 위해 jQuery를 사용하여 간단한 테스트 페이지를했습니다 .. 그것은 현재 XML 파일에 추가되지만 시작/끝 노드가 필요합니다.

+1

, 당신은 $ 콘텐츠의 조각을 가지고 $ 콘텐츠 = ''처럼, 그것의 주위에 물건을 포장합니다. $ 콘텐츠. ''; 파일에 다시 넣으시겠습니까? 당신은 내가 생각하기에 그 시작과 끝 노드를 제거 할 수 있기를 원합니 까? – tomzx

+3

SimpleXML과 같은 xml 라이브러리를 사용합니까? – txwikinger

+0

내 게시물을 좀 더 자세히 업데이트했습니다 ... @tomzx 말하자면, 위에서 말한 노드들을 xml 파일에 모두 루트 노드에 멋지게 감쌌습니다 ( . 루트 노드 내에 자식 노드 (위의 두 노드 중 하나)를 추가/추가하려고합니다. @txwikinger 현재 XML 라이브러리를 사용하고 있지 않습니다. 나는 그들이 일하는 방식에 익숙하지 않다 ... –

답변

3

txwinger 귀하의 질문에 자신의 의견에 올바른 생각을했다. PHP를 사용하여 노드를 추가하기 위해 여러 가지 기본 제공 XML 조작 라이브러리를 사용하고 직렬화 한 다음 텍스트 파일로 저장해야합니다. SimpleXML에서, 예를 들면 :

$xml = simplexml_load_file('test.xml'); 
$vote = $xml->addChild('vote', '5'); 
$vote->addAttribute('id','1_0'); 
$fp = fopen('test.xml', 'w'); 
fwrite($fp, $xml->asXML()); 
fclose($fp); 

더 나은 귀하의 작업에 맞게 수 other XML manipulation libraries 있습니다

+0

현재 서버에서 액세스 할 수있는 권한이 없다고해서 이러한 라이브러리를 "설치"해야합니까? –

+0

아마 지금입니다. SimpleXML은 모든 PHP 5.0 버전에 기본적으로 포함되어 있습니다. XMLWriter (또 다른 옵션)는 5.1.2 이상의 모든 버전에 기본적으로 포함되어 있습니다. 귀하의 시스템 관리자가이를 해제했을 수도 있지만 의심 스럽습니다. – Otterfan

+0

죄송합니다. – Otterfan

0

XML 문서의 구조에 따라 달라집니다. (가) "휴식"경우 예측, 당신은 다시 "휴식"파일에서 그 부분을 잘라 새로운 데이터를 추가하고 붙여 넣을 수 :

 ⋮ 
n-1:  <node>last node</node> 
n : </root> 


     ⋮ 
n-1:  <node>last node</node> 
n :  <node>new node</node> 
n+1: </root> 
+0

@ Gumbo 나는 그것이 정확하게하려고 생각하고 있다고 생각한다. 어떻게 이런 일을 할 것인가? –

0

이 빠르고 더러운 방법을하려고하는 경우 : 당신이 파일을 열 경우 "R +"와 포인터를 마지막 요소와 파일 끝 사이의 빈 줄에 설정하면 루트 수준 요소 인 닫기 태그를 덮어 쓰게되므로 새로운 자식 요소를 작성한 후에 포인터를 다시 추가하십시오. 4 시간 동안 PHP 스크립트를 작성 했으므로 더 나은 방법이 있음을 염두에 두십시오. 그러나 이것은 4 시간 경력에서 가장 간단합니다. 내가 제대로 이해하면

$name = $_POST["name"]; 
$phone = $_POST["phone"]; 

$fh = fopen("xml-test-1.xml", "r+"); 
if (!$fh) 
{ 
    die("Failed to open"); 
} 

fseek($fh, -11, SEEK_END); 
fwrite($fh, "<person> \n"); 
fwrite($fh, "<name>$name</name> \n"); 
fwrite($fh, "<phone>$phone</phone> \n"); 
fwrite($fh, "</person> \n"); 
fwrite($fh, "</people> \n"); 
fclose($fh); 

echo "now look and see if anything was added";