login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Waarde in xml bestand wijzigen

Offline Ultimatum - 02/03/2009 14:45 (laatste wijziging 02/03/2009 14:47)
Avatar van UltimatumPHP 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:
  1. <?php
  2. public function replaceBookmarks($sName, $sValue) {
  3. $sName = strtolower($sName);
  4. $sText = '<w:r>';
  5. foreach(explode('<br />', $sValue) as $sLine) {
  6. $sText .= '<w:t>'. trim($sLine) .'</w:t><w:br/>';
  7. }
  8. $sText .= '</w:r>';
  9.  
  10. $this->sDocument = preg_replace('/<w:bookmarkStart w:id=\"(\d+)+\" w:name=\"'. $sName .'"\/>/', '<w:bookmarkStart w:id="${1}" w:name="'. $sName .'"/>'. $sText, $this->sDocument);
  11. }
  12. ?>


Dit is de xml waar ik mee begin
  1. <w:bookmarkStart w:id="6" w:name="titel"/>
  2. <w:bookmarkEnd w:id="6"/>


En door middel van bovenstaand php code wijzig ik het naar dit
  1. <w:bookmarkStart w:id="6" w:name="titel"/>
  2. <w:r>
  3. <w:t>Dit is een titel</w:t>
  4. <w:br/>
  5. </w:r>
  6. <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.
  1. <w:bookmarkStart w:id="6" w:name="titel"/>
  2. <w:r>
  3. <w:t>Dit is een titel</w:t>
  4. <w:br/>
  5. </w:r>
  6. </w:bookmarkStart>

2 antwoorden

Gesponsorde links
Offline Flex1986 - 02/03/2009 18:52
Avatar van Flex1986 Gouden medaille

Senior Member
Inladen met PHP.net: simplexml daarna met PHP.net: fwrite wegschrijven in een xml file.

  1. $xml = simplexml_load_file("xml");
  2.  
  3. foreach($xml->attribute as $attribute){
  4. if($attribute->subattribute == $waarde){
  5. $attribute->subattribute = 100
  6. }
  7. }


Zo kan je data wijzingen. En met fwrite en een $xml->asXML(); kreeg je een XML representatie van je bestand met wijzigingen.
Offline Ultimatum - 03/03/2009 08:50 (laatste wijziging 03/03/2009 10:15)
Avatar van Ultimatum PHP expert Het schrijven van het bestand is geen probleem, maar ik moet dus ech zoeken en buiten de parent een nieuw element aanmaken, kan dat zo met simplexml dan want gisteren was mij dat niet gelukt met simplexml.

Want je hebt wel een mooie code neergezet maar als je kijkt naar mijn tags dan zijn ze niet zoals normaal maar staat er een : in, dus $xml->w:boomarkStart geeft een error (Wat nogal logisch is).

Volgens mij heb ik het nu opgelost dmv registerXPathNamespace() en xpath().

  1. <?php
  2. $xml = simplexml_load_string ($this->sDocument);
  3. $xml->registerXPathNamespace('w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
  4. $result = $xml->xpath('//w:bookmarkStart[@w:name="opdrachtgever"]/parent::*');
  5. $oWr = $result[0]->addChild('w:r');
  6. $oWr->addChild('w:t', 'Dit is een teest');
  7. echo htmlspecialchars($xml->asXml());
  8. ?>


Ik laat topic even open voor het geval ik nog problemen krijg 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.212s