$dom = new DOMDocument();
$dom->loadXML($xml);
$root = $dom->documentElement;
// strip all text nodes from this tree
$children = $root->childNodes;
$len = $children->length;
for ($index = $children->length - 1; $index >= 0; $index--) {
    $current = $children->item($index);
    if ($current->nodeType == XML_TEXT_NODE) {
        $noderemoved = $root->removeChild($current);
    }
}
echo "Start cloneNode test\n";
$first_course = $children->item(0);
$cloned_first_course_default = $first_course->cloneNode();
$first_course->setAttribute('title', 'new title1');
$cloned_first_course_true = $first_course->cloneNode(true);
$first_course->setAttribute('title', 'new title2');
$cloned_first_course_false = $first_course->cloneNode(false);
$first_course->setAttribute('title', 'new title3');
$cloned_first_course_default->setAttribute('title', 'new title default');
$cloned_first_course_true->setAttribute('title', 'new title true');
$cloned_first_course_false->setAttribute('title', 'new title false');
$root->appendChild($cloned_first_course_default);
$root->appendChild($cloned_first_course_true);
$root->appendChild($cloned_first_course_false);
$children = $root->childNodes;
for ($index = 0; $index < $children->length; $index++) {
    echo "node {$index}\n";
    dumpcourse($children->item($index));
}
EOXML;
function dumpcourse($current)
{
    $title = $current->nodeType != XML_TEXT_NODE && $current->hasAttribute('title') ? $current->getAttribute('title') : "no title";
    echo "Course: {$title}:";
    echo get_class($current), "\n";
    echo "~";
    var_dump($current->textContent);
}
$dom = new DOMDocument();
$dom->loadXML($xml);
$root = $dom->documentElement;
$children = $root->childNodes;
$len = $children->length;
echo "original has {$len} nodes\n";
for ($index = $children->length - 1; $index >= 0; $index--) {
    echo "node {$index}\n";
    $current = $children->item($index);
    dumpcourse($current);
    if ($current->nodeType == XML_TEXT_NODE) {
        $noderemoved = $root->removeChild($current);
    }
}
$children = $root->childNodes;
$len = $children->length;
echo "after text removed it now has {$len} nodes\n";
for ($index = 0; $index < $children->length; $index++) {
    echo "node {$index}\n";
    $current = $children->item($index);
    dumpcourse($current);
}