I have the following code in my 'update_xml.php' file:
$xml = simplexml_load_file('content.xml');
$name = $_POST['name'];
$xml->home->main->title = $name;
$output = $xml->asXML();
...
I'm using AJAX to post data to this file:
var name = $(this).val();
$.post("update_xml.php", {name: name}, ...
All this works fine, but I also need to be able to post the specific tag to be updated too. Eg:
var name = $(this).val();
$.post("update_xml.php", {name: name, tag: '$xml->home->main->title'}, ...
$xml = simplexml_load_file('content.xml');
$name = $_POST['name'];
$tag = $_POST['tag'];
$tag = $name;
This clearly doesn't work ($tag is now a string). I've tried using eval(), to no avail, and not the best way of going about this. Any ideas?
You could use XPath, which is a language for addressing nodes in an XML document. SimpleXML has an xpath()
method.
In your example, the XPath would be simple:
$.post("update_xml.php", {name: name, path: '/home/main/title}, ...
And you'd apply it like this:
$xml = simplexml_load_file('content.xml');
$xpath_results = $xml->xpath($_POST['path']);
// $xpath_results is always an array of 0 or more objects
if ( ! $xpath_results ) ... #HANDLE ERROR
$tag = $xpath_results[0];