Search code examples
phpxmldomdomdocument

How to edit specific node value for XML DOMDocument?


I have the following xml file:

<products>
<info><productName>Chocolate Cake</productName> <productDescription>uieovbeveb</productDescription><quantity>1</quantity><stock>22</stock><price>2.99,12.99</price><size>200 ml</size><type>India,colombia</type></info>
<info><productName>watermelon</productName><productDescription>fr</productDescription><quantity>rf</quantity><stock>34</stock><price>4</price><size>4</size><type>5</type></info>
</products>

I would like to access one of the the productDescription tag of one of the product and change its value, however it is not working.

Here is what I tried until now:

if (isset($_POST['editProduct'])) {


$xml = new DomDocument("1.0", "UTF-8");
$xml->load('./data/productDB.xml');

$productName = $_POST['productName'];
$productDescription = $_POST['productDescription'];
$quantity = $_POST['quantity'];
$stock = $_POST['stock'];
$price = $_POST['price'];
$size = $_POST['size'];
$type = $_POST['type'];
$sizetoString = implode(",", $size);
$typetoString = implode(",", $type);
$pricetoString = implode(",", $price);

$products = $xml->getElementsByTagName('info');


foreach($products as $product) {
    $nameOfProduct = $product->getElementsByTagName('productName')->item(0)->nodeValue;

    if($nameOfProduct == $productName) {
        $product->getElementsByTagName('productDescription')->item(0)->nodeValue="";
        $product->getElementByTagName('productDescription')->item(0)->appendChild($product->createTextNode($productDescription));

    }
}

$xml->save("./data/productDB.xml");

Solution

  • Try this example:

    // load the document
    $products = simplexml_load_file('test.xml');
    
    // loop through each product and change description
    foreach($products as $product) {
        $product->productDescription = 'new description';
    }
    
    // save the new xml
    $products->asXML('test.xml');