PHP expert |
|
Ey, ik moet in een xml bestand een bepaalde waarde wijzigen, dit lukt wel maar is niet de mooiste (en snelste manier) om dit te doen.
Dit is wat ik nu heb:
<?php
public function replaceBookmarks($sName, $sValue) {
$sName = strtolower($sName);
$sText = '<w:r>';
foreach(explode('<br />', $sValue) as $sLine) {
$sText .= '<w:t>'. trim($sLine) .'</w:t><w:br/>';
}
$sText .= '</w:r>';
$this->sDocument = preg_replace('/<w:bookmarkStart w:id=\"(\d+)+\" w:name=\"'. $sName .'"\/>/', '<w:bookmarkStart w:id="${1}" w:name="'. $sName .'"/>'. $sText, $this->sDocument);
}
?>
<?php public function replaceBookmarks($sName, $sValue) { $sText = '<w:r>'; foreach(explode('<br />', $sValue) as $sLine) { $sText .= '<w:t>'. trim($sLine) .'</w:t><w:br/>'; } $sText .= '</w:r>'; $this->sDocument = preg_replace('/<w:bookmarkStart w:id=\"(\d+)+\" w:name=\"'. $sName .'"\/>/', '<w:bookmarkStart w:id="${1}" w:name="'. $sName .'"/>'. $sText, $this->sDocument); } ?>
Dit is de xml waar ik mee begin
<w:bookmarkStart w:id="6" w:name="titel"/>
<w:bookmarkEnd w:id="6"/>
<w:bookmarkStart w:id="6" w:name="titel"/> <w:bookmarkEnd w:id="6"/>
En door middel van bovenstaand php code wijzig ik het naar dit
<w:bookmarkStart w:id="6" w:name="titel"/>
<w:r>
<w:t>Dit is een titel</w:t>
<w:br/>
</w:r>
<w:bookmarkEnd w:id="6"/>
<w:bookmarkStart w:id="6" w:name="titel"/> <w:r> <w:t>Dit is een titel</w:t> <w:br/> </w:r> <w:bookmarkEnd w:id="6"/>
Maar hoe kan ik dit makkelijker doen en een nettere code ipv de preg_replace. Het is met met de xml classes op php.net (nog) niet gelukt.
Het verst dat ik was gekomen was dat de <w:r> en <w:t> tags in de w:bookmarkStart werd gemaakt. Dus op deze manier, maar dit is niet de manier en dit is ook niet valid xml voor een doc(x) bestand.
<w:bookmarkStart w:id="6" w:name="titel"/>
<w:r>
<w:t>Dit is een titel</w:t>
<w:br/>
</w:r>
</w:bookmarkStart>
<w:bookmarkStart w:id="6" w:name="titel"/> <w:r> <w:t>Dit is een titel</w:t> <w:br/> </w:r> </w:bookmarkStart>
|