Bu yüzden bir Word belgesindeki bazı metni düzenlemem gerekiyor. Bir Word belgesi oluşturdum ve XML olarak kaydettim. Doğru bir şekilde kaydedildi (XML dosyasını MS Word'de açabilirim ve docx orijinaline benziyor). Bu düzgün işletilirsePHP'de sorun düzenleme word dosyası
<?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);
(hiçbir hata): - (zaten çalışma versiyonunu sabittir feryat DÜZENLEME)
Ondan sonra (sadece iki satır) dosyasında bazı metin düzenlemek için PHP DOM kullanın. Bu iki satır:
<w:t>First Name:</w:t>
<w:t>Last Name:</w:t>
bu değiştirilir alın: Ancak
<w:t>First Name: Richard</w:t>
<w:t>Last Name: Knop</w:t>
, MS Word son-xml.xml dosyayı açmaya çalıştığınızda, bu açılmıyor (Word donar) . Baska öneri.
DÜZENLEME:
I() Levenstein kullanarak çalıştı:
$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++;
}
şey outputted.
Bu garip. Son-xml.xml dosyasını not defterinde açtığımda, bu iki çizginin değiştiğini açıkça görebiliyorum.
EDIT2: http://uploading.com/files/61b2922b/template.xml/
bu bir karakter kodlaması sorun olabilir mi? –
, aslında yaptığınız tek değişiklik olduğunu doğrulamak için orijinali ve sonucu değiştirebilir misiniz? – mvds
Her iki XML dosyasını denemek ve ayırt etmek için array_diff kullanacağım. –