How do I change this function to add the child nodes into the //root/Product/Genres node instead of adding to the end of the file (i.e. after </root>

StackOverflow https://stackoverflow.com/questions/3683351

  •  02-10-2019
  •  | 
  •  

Question

It works properly in the way that it breaks up the comma-separated values into an array (with explode), but when it adds the child nodes, they show up after the closing root tag. What I'm trying to do here is replace the <Genres>Adventure,Crime,Action</Genres> with

<Genre>Adventure</Genre>
<Genre>Crime</Genre>
<Genre>Action</Genre>

A simplified XML source:

<?xml version="1.0" encoding="UTF-8"?>
<root><Product><Genres>Adventure,Crime,Action</Genres></Product></root>

<Genre>Adventure</Genre>
<Genre>Crime</Genre>
<Genre>Action</Genre>

My function:

global $genreArray;
$genres = explode(",",$genreArray->nodeValue);

 foreach ($genres as $genre) {
 $node = $XmlDoc->createElement('Genre', $genre);
 $XmlDoc->appendChild($node);
 }

}

Thanks for any help, I've been working on this for days now lol ;)

Was it helpful?

Solution

The answer was to add a function "insertNewChild" and use it thusly:

    //Convert Genres CSV into individual Genre nodes

global $genreArray;
if (substr_count($genreArray->nodeValue, ',') > 0) 
    {
    $genres = explode(",",htmlspecialchars($genreArray->nodeValue));
    $genreArray->nodeValue = "";
    $allgenres = $XmlDoc->getElementsByTagName('Genres');
    $parent = $allgenres->item(0);
        foreach ($genres as $genre) 
        {
        $newnode = $XmlDoc->createElement('Genre', $genre);
        insertNewChild($parent,$newnode);
        }
    } 
else 
{
$genre = htmlspecialchars($genreArray->nodeValue);
$genreArray->nodeValue = "";
$allgenres = $XmlDoc->getElementsByTagName('Genres');
$parent = $allgenres->item(0);
$newnode = $XmlDoc->createElement('Genre', $genre);
insertNewChild($parent,$newnode);
}

and the insertNewChild function :

function insertNewChild($currentNode, $node)
{
   $currentNode->insertBefore($node, $currentNode->firstChild);   
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top