Vì vậy, tôi cần chỉnh sửa một số văn bản trong tài liệu Word. Tôi đã tạo một tài liệu Word và lưu nó dưới dạng XML. Nó được lưu một cách chính xác (tôi có thể mở tập tin XML trong MS Word và nó trông giống như bản gốc docx).Sửa lỗi tệp từ trong PHP
Vì vậy, sau đó tôi sử dụng PHP DOM để chỉnh sửa một số văn bản trong tập tin (chỉ cần hai dòng) (EDIT - dưới đây đã được cố định phiên bản làm việc):
<?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);
này được thực hiện đúng cách (không có lỗi). Hai dòng này:
<w:t>First Name:</w:t>
<w:t>Last Name:</w:t>
Nhận thay thế bằng những:
<w:t>First Name: Richard</w:t>
<w:t>Last Name: Knop</w:t>
Tuy nhiên, khi tôi cố gắng để mở tập tin cuối cùng-xml.xml trong MS Word, nó không mở (Word đóng băng) . Bất kỳ đề xuất.
EDIT:
tôi đã cố gắng sử dụng Levenstein():
$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++;
}
nào outputted gì.
Điều kỳ lạ. Khi tôi mở tệp final-xml.xml trong notepad, tôi có thể thấy rõ ràng rằng hai dòng đó đã thay đổi.
EDIT2:
Dưới đây là file template.xml: http://uploading.com/files/61b2922b/template.xml/
đây có phải là sự cố mã hóa ký tự không? –
bạn có thể 'diff' bản gốc và kết quả, để xác minh rằng đây là thực tế thay đổi duy nhất bạn đã thực hiện? – mvds
Tôi sẽ sử dụng array_diff để thử và phân biệt cả hai tệp XML. –