...

View Full Version : XML and PHP replaceChild problem



robdraw
06-21-2009, 09:57 PM
Hi I am testing a script where I can change an XML files nodes value with PHP, It seems to work except for one issue the text within the node is changed but when I save it back to the file the nodes have dissappered and only the text is present, any ideas where I am going wrong here?

The XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<home>
<heading>A header</heading>
<content>The content</content>
<image>img/animage.jpg</image>
</home>
</root>

The code

<?php
// Load the XML
$dom = new DomDocument;

$dom->Load('xml01.xml');
// Locate the old parent node
$xpath = new DOMXpath($dom);
$nodelist = $xpath->query('/root/home/content');
$oldnode = $nodelist->item(0);
?>


<?php
// Load the new text string
$modtxt = $_POST['my_text'];
$text = $dom->createTextNode($modtxt);


// Replace
$oldnode->parentNode->replaceChild($text, $oldnode);

// Display
echo $dom->saveXML();

// Now save it to the file,, hmmmm this has a problem the node is changed but it saves new data without the node

print $dom->save("xml01.xml");

?>

New saved XML
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<home>
<heading>A header</heading>
New Text String
<image>img/animage.jpg</image>
</home>
</root>

Any help would be highly appriciated

Rob

Alex Vincent
06-22-2009, 07:25 AM
I think this is an XPath problem. Your XPath,
/root/home/content, is selecting the content element, and not its first child node (the text).

Take a look in our XML Documentation and References thread (stickied at the top of this forum) for the XPath specification - you will probably find the right XPath step to append there. (I think it's
/text().)

robdraw
06-22-2009, 07:55 AM
Thats it thank you



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum