所以我需要在Word文檔中編輯一些文本。我創建了一個Word文檔並將其保存爲XML。它被正確保存(我可以在MS Word中打開XML文件,它看起來完全像docx原始文件)。在PHP中編輯word文件的問題
於是我使用PHP DOM文件中編輯一些文本(只是兩行)(編輯 - 波紋管已經是固定的工作版本):
<?php
$firstName = 'Richard';
$lastName = 'Knop';
$xml = file_get_contents('template.xml');
$doc = new DOMDocument();
$doc->loadXML($xml);
$doc->preserveWhiteSpace = false;
$wts = $doc->getElementsByTagNameNS('http://schemas.openxmlformats.org/wordprocessingml/2006/main', 't');
$c1 = 0; $c2 = 0;
foreach ($wts as $wt) {
if (1 === $c1) {
$wt->nodeValue .= ' ' . $firstName;
$c1++;
}
if (1 === $c2) {
$wt->nodeValue .= ' ' . $lastName;
$c2++;
}
if ('First Name' === substr($wt->nodeValue, 0, 10)) {
$c1++;
}
if ('Last Name' === substr($wt->nodeValue, 0, 9)) {
$c2++;
}
}
$xml = str_replace("\n", "\r\n", $xml);
$fp = fopen('final-xml.xml', 'w');
fwrite($fp, $xml);
fclose($fp);
這被正確執行(沒有錯誤)。這兩條線路:
<w:t>First Name:</w:t>
<w:t>Last Name:</w:t>
被替換這些:
<w:t>First Name: Richard</w:t>
<w:t>Last Name: Knop</w:t>
然而,當我嘗試打開MS Word中的最終xml.xml文件,它不會打開(字凍結) 。有什麼建議麼。
編輯:
我嘗試使用萊文施泰因():
$xml = file_get_contents('template.xml');
$xml2 = file_get_contents('final-xml.xml');
$str = str_split($xml, 255);
$str2 = str_split($xml2, 255);
$i = 0;
foreach ($str as $s) {
$dist = levenshtein($s, $str2[$i]);
if (0 <> $dist) {
echo $dist, '<br />';
}
$i++;
}
哪個輸出什麼。
這很奇怪。當我在記事本中打開final-xml.xml文件時,我可以清楚地看到這兩行改變了。
EDIT2:
這裏是TEMPLATE.XML文件:http://uploading.com/files/61b2922b/template.xml/
這可能是一個字符編碼問題? – 2010-07-19 07:08:59
你能否比較原始和結果,以驗證這實際上是你做出的唯一改變? – mvds 2010-07-19 07:23:16
我打算使用array_diff來嘗試區分這兩個XML文件。 – 2010-07-19 07:50:39