[PHP + XML +DOM] Textwaarde van een node vervangen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Mensen,
ik zit met een lastig dingetje,

Ik wil een script schrijven waarbij ik dus het adres in een WordML (xml) document kan plakken.
In word heb je de node: <w:t> wat een tekstelement is. Nu om te bepalen wat de goede plaats is voor de naam bijvoorbeeld doe ik dit: <w:t naam="naam_geadreseerde"> zodat ik weer waar de naam van de geadreseerde moet komen te staan.

Maargoed, mijn bedoeling was om dit met PHP op te lossen middels DOM objecten. Oke ik dus mijn PHP5 superboek opengeslagen en gaan studeren. Hier vindt ik het een en het ander leuke over het uitlezen van XML bestanden, en bijvoorbeeld verwijderen van nodes. Ook snuffel ik rond op google en de PHP.net DOM reference, hoewel daar erg weinig documentatie te vinden is.
Ook heb ik op got weinig tot niks over kunnen vinden eigenlijk.

Maargoed, ik was er wel bijna had namelijk het volgende stukje code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//---
//XML Object openen
//---
$objXML           = New DOMDocument();
$objXML->load("test.xml");
$objRootElement   = $objXML->documentElement;
$a_TextElements   = $objRootElement->getElementsByTagName("t");
foreach($a_TextElements AS $objThisElement)
{      
      Switch ($objThisElement->getAttribute("naam"))
      {
            Case 'naam_geadreseerde' :  
                  //WAARDE VERANDEREN             
                  break;                                  
      }
            
}
header('content-type:text/xml');
echo $objXML->saveXML();
unset($objXML);
?>


Wat dus al een hele hoop doet, hij selecteerd namelijk de goede elementen. Als ik in de case statement $objThisElement->textContent zou doen zou ik dus ook de waarde terug krijgen, maar dat wil ik niet. Wat ik wil is de waarde wijzigen van die node maar dat lukt me niet, of gekker nog ik weet geen goede (en logische) methode om die klus te klaren, en hoopte dat wellicht iemand anders mij hierin verder kon helpen.......

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
http://nl2.php.net/manual...-domnode-replacechild.php
icm http://nl2.php.net/manual...cument-createtextnode.php ?

//e als ik je script begrijp, moet je een attribuut veranderen? dan moet je hier even kijken :) http://nl2.php.net/manual...melement-setattribute.php $domel->setAttribute('naam','klaas');

[ Voor 42% gewijzigd door r0bert op 24-08-2005 02:46 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Iets minder netjes dan replaceChild en createTextnode is DomNode::nodeValue, dus $node->nodeValue='blaat'. Als de node echter children heeft verdwijnen die hiermee...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De laatste lijkt me een goede oplossing, maar is inderdaad een beetje vies.
Overigens zijn de member variabelen (zoals nodeValue niet private of protected, aldus je ze niet kan benaderen?)

Ik ga het straks eventjes proberen!


edit:

Super het werkt!!! erg bedankt!!!!

[ Voor 12% gewijzigd door Verwijderd op 25-08-2005 00:49 ]


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Verwijderd schreef op woensdag 24 augustus 2005 @ 22:27:
De laatste lijkt me een goede oplossing, maar is inderdaad een beetje vies.
Overigens zijn de member variabelen (zoals nodeValue niet private of protected, aldus je ze niet kan benaderen?)
Ze zijn idd niet private of protected, zodat je ze juist wél van buitenaf kunt benaderen...