Как изменить эту функцию, чтобы добавить дочерние узлы в узел // root / Product / Genres вместо добавления в конец файла (т. Е. После </root> - PullRequest
0 голосов
/ 10 сентября 2010

Он работает правильно, так как разделяет значения через запятую в массив (с разнесением), но когда он добавляет дочерние узлы, они появляются после закрывающего корневого тега.Здесь я пытаюсь заменить <Genres>Adventure,Crime,Action</Genres> на

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

Упрощенный источник XML:

<?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>

Моя функция:

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

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

}

Спасибо за любую помощь, я работаю над этим уже несколько дней, LOL;)

1 Ответ

0 голосов
/ 15 октября 2010

Ответ состоял в том, чтобы добавить функцию "insertNewChild" и использовать ее таким образом:

    //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);
}

и функцию insertNewChild:

function insertNewChild($currentNode, $node)
{
   $currentNode->insertBefore($node, $currentNode->firstChild);   
}
...