2010-12-19 89 views
1

Bassicly我想要做的是使用PHP打開一個xml文件並使用php編輯它,現在我可以使用fopen()函數。 但我的問題是,我想追加文本到文檔的中間。所以可以說XML文件有10行,我想在最後一行(10)之前附加一些東西,所以現在它將是11行。這可能嗎。由於使用PHP寫入文件

+0

http://php.net/manual/en/function.domnode-insert-before.php – seriousdev 2010-12-19 16:15:30

回答

1

根據該文件有多大,你可以這樣做:

$lines = array(); 
$fp = fopen('file.xml','r'); 
while (!feof($fp)) 
    $lines[] = trim(fgets($fp)); 
fclose($fp); 

array_splice($lines, 9, 0, array('newline1','newline2',...)); 

$new_content = implode("\n", $lines); 

不過,你需要重新驗證XML語法之後...

+0

好了之後,9是什麼0。而你在哪裏有newline1和newline2是我要把信息放在哪裏? – DonJuma 2010-12-19 16:24:45

+0

有關詳細信息,請參見[array_splice()](http://www.php.net/manual/en/function.array-splice.php)文檔。 9是插入新元素的位置。 0是你想要替換的索引9之後的元素數目(無,在你的情況下,我假設?),然後是替換數組。 – 2010-12-19 16:27:04

+0

好吧,所以這看起來不錯,但它看起來像你關閉$ fp這是否仍然保存新文本? – DonJuma 2010-12-19 16:32:49

1

如果你希望能夠到修改從中間文件,使用c+打開模式:

$fp = fopen('test.txt', 'c+'); 

for ($i=0;$i<5;$i++) { 
    fgets($fp); 
} 

fwrite($fp, "foo\n"); 
fclose($fp); 

上面將寫在第五行「foo」的,而不必完全讀取該文件。

但是,如果要修改XML文檔,它可能更好地使用DOM解析器:

$dom = new DOMDocument; 
$dom->load('myfile.xml'); 

$linenum = 5; 
$newNode = $dom->createElement('hello', 'world'); 

$element = $dom->firstChild->firstChild; // skips the root node 
while ($element) { 
    if ($element->getLineNo() == $linenum) { 
     $element->parentNode->insertBefore($newNode, $element); 
     break; 
    } 
    $element = $element->nextSibling; 
} 

echo $dom->saveXML(); 

當然,上面的代碼依賴於實際的XML文檔結構。但是,$element->getLineNo()是這裏的關鍵。