Liebe Mitdenker, liebe Wissende, liebe Neugierige,
chakka!
habe einen Fehlerpfad gefunden.
Wenn man dieselbe vorbereitete newNode innerhalb eines Durchlaufes erst für insertBefore() und anschließend für appenChild() verwendet, gewinnt der letzte INSERT, also das appenChild(). Das muss ich freilich noch genauer untersuchen, aber es wird augenscheinlich nicht mit dem Muster der neunen Node gearbeitet, sondern mit dem Original.
meine Test-HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>DomDocument</title>
<link rel="stylesheet" type="text/css" href="style.css">
<style type="text/css">
body {
font-family: century gothic, sans-serif;
}
img {
border: 1px solid blue;
padding: 5px;
background-color: #30C060;
}
table {
border: 1px solid #000000;
padding: 3px;
border-collapse: collapse;
cell-spacing: 0;
}
td {
border: 1px dotted #000000;
padding: 3px;
}
</style>
</head>
<body>
<!-- BEGINN Einleitungstext -->
Hallo, hier steht Text
in zwei Zeilen mit Umbruch
<!-- ENDE Einleitungstext -->
<div id="main">
<div id="left"><p class="rot">Ich bin 1</p></div>
<div id="center"><h1>Ich bin 2</h1></div>
<div id="right"><img src="harzhexe.jpg" alt="Harzhexe"></div>
<a href="standard.doc.html" title="hier klicken">Hier klicken</a>
</div>
<table id="t001">
<tr id="t001-tr001">
<td class="c1">1-1-Eins</td>
<td>1-1-Zwei</td>
<td class="c1">1-1-Drei</td>
</tr>
<tr id="t001-tr002">
<td>1-2-Eins</td>
<td>1-2-Zwei</td>
<td>1-2-Drei</td>
</tr>
</table>
<br>
<table id="t002">
<tr id="t002-tr001">
<td>2-2-Eins</td>
<td>2-2-Zwei</td>
<td>2-2-Drei</td>
</tr>
</table>
</body>
</html>
Ausschnitt aus dem Testskript:
$dom = new DOMDocument('1.0', 'utf-8');
#$dom = new DOMDocument();
$dom->formatOutput = TRUE;
#$dom->validateOnParse = TRUE;
$dom->normalizeDocument();
#$dom->preserveWhiteSpace = false;
$dom->loadHTMLFile('standard.doc.html');
#var_dump($dom->validateOnParse);
$td = $dom->createElement('td');
$td->setAttribute('class', 'saldo');
$td1 = clone $td;
$td2 = clone $td;
$td1->nodeValue = 'Ich bin die erste neue Node';
$td2->nodeValue = 'Ich bin die zweite neue Node';
$tr = $dom->getElementById('t001-tr001');
$first = $tr->firstChild;
$first_td = $tr->getElementsByTagName('td')->item(0);
$last = $tr->lastChild;
echo "\r\n<pre>";
echo htmlspecialchars(print_r($tr, 1));
echo "\r\n</pre>";
echo "\r\n<pre>";
echo htmlspecialchars(print_r($first_td, 1));
echo "\r\n</pre>";
#$newtd1 = $first_td->parentNode->insertBefore($td, $first_td);
#$newtd1 = $tr->insertBefore($td, $first_td);
#$newtd1 = $tr->insertBefore($td);
#$newtd1 = $first->parentNode->insertBefore($td, $first);
#$newtd1 = $first->parentNode->insertBefore($td, $first);
$newtd1 = $tr->insertBefore($td1, $first);
echo "\r\n<pre>";
echo htmlspecialchars(print_r($newtd1, 1));
echo "\r\n</pre>";
$newtd2 = $tr->appendChild($td2);
$elements = NULL;
#if ($dom->validate())
{
$elements = $dom->getElementsByTagName('*');
}
#else
{
# echo "Dokument ist nicht valide";
# exit;
}
#$table = $dom->getElementById('t001');
#$table->normalize();
#$_arr = getArray($table);
echo "<h1>DOM Document</h1>\r\n";
echo "<pre>\r\n";
#var_dump($table);
#echo htmlspecialchars(print_r($table, 1));
#echo htmlspecialchars($dom->saveHTML($table));
#echo htmlspecialchars(print_r($_arr, 1));
#echo "\r\n", htmlspecialchars(print_r(dom2array($table), 1));
#echo "\r\n", htmlspecialchars(print_r(xml_to_array($table), 1));
if (!is_null($elements))
{
$indent = 0;
foreach ($elements as $element)
{
if ($element->nodeType == XML_ELEMENT_NODE)
{
# echo "\r\n" . $element->nodeName . ": ";
$xpath = "\r\n" . $element->getNodePath();
echo $xpath;
if ($element->hasAttributes())
{
$attributes = $element->attributes;
foreach ($attributes as $attrib)
{
echo $xpath . '/#attrib[' . $attrib->name . ']: ' . $attrib->value;
}
}
if ($element->hasChildNodes())
{
$nodes = $element->childNodes;
foreach ($nodes as $node)
{
## HTML-Nutztext
if ($node->nodeType == XML_TEXT_NODE)
{
if (strlen(trim($node->nodeValue)) > 0)
{
echo $xpath . '/#text: ' . trim($node->nodeValue);
}
}
## Text in <style>, usw.
elseif ($node->nodeType == XML_CDATA_SECTION_NODE)
{
# echo $xpath . '/#cdata-length: ' . trim($node->length);
echo $xpath . '/#cdata: ' . trim($node->textContent);
}
## Kommentare
elseif ($node->nodeType == XML_COMMENT_NODE)
{
echo $xpath . '/#comment: ' . $node->nodeValue;
}
}
}
}
}
}
echo "</pre>\r\n";
$dom->saveHTMLFile('standard.save.html');
Spirituelle Grüße Euer Robert
--
Möge der Forumsgeist wiederbelebt werden!
Möge der Forumsgeist wiederbelebt werden!