Por lo tanto, necesito editar algunos textos en un documento de Word. Creé un documento de Word y lo guardé como XML. Se guarda correctamente (puedo abrir el archivo XML en MS Word y se ve exactamente como el original docx).Problema al editar el archivo de palabras en PHP
Entonces yo uso DOM PHP para editar un texto en el archivo (sólo dos líneas) (Editar - abajo ya está fijada versión de trabajo):
<?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);
Esta es ejecutado correctamente (sin errores). Estas dos líneas:
<w:t>First Name:</w:t>
<w:t>Last Name:</w:t>
se reemplazan con los siguientes:
<w:t>First Name: Richard</w:t>
<w:t>Last Name: Knop</w:t>
Sin embargo, cuando intento abrir el archivo final-xml.xml en MS Word, no se abre (Word congela) . Alguna sugerencia.
EDIT:
He intentado utilizar 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++;
}
cual emite nada.
Que es raro. Cuando abro el archivo final-xml.xml en el bloc de notas, puedo ver claramente que esas dos líneas han cambiado.
Edit2:
Aquí está el archivo template.xml: http://uploading.com/files/61b2922b/template.xml/
podría ser un problema de codificación de caracteres? –
podría 'diff' el original y el resultado, para verificar que este es, de hecho, el único cambio que ha realizado? – mvds
Voy a usar array_diff para tratar de diferenciar ambos archivos XML. –