Robert R.: Chakka! DOMDocument & Co. - insertBefore() - Teil 1

Beitrag lesen

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!
1 43

Gute HTML-Parser-Klasse gesucht

Robert R.
  • php
  1. 1
    1UnitedPower
    1. 2
      Robert R.
  2. 1
    Felix Riesterer
    1. 0
      Robert R.
  3. 1
    Mattes
    1. 1
      1UnitedPower
      1. 0
        Mattes
        1. 0
          1UnitedPower
        2. 0
          Robert R.
      2. 0
        Robert R.
        1. 0
          1UnitedPower
        2. 0
          Felix Riesterer
    2. 0
      Robert R.
      1. 0
        Mattes
  4. 0

    DOMDocument & Co. richtig anwenden

    Robert R.
    1. 0
      Robert R.
      1. 0
        dedlfix
        1. 0

          DOMDocument & Co. - grafische Darstellung erzeugen?

          Robert R.
          1. 0
            dedlfix
            1. 0

              DOMDocument & Co. - Beispiel gefunden, trotzdem Fragen

              Robert R.
              1. 0

                DOMDocument & Co. - Nodetype für <style>-Definitionen gesucht

                Robert R.
                1. 0

                  DOMDocument & Co. - CData-Node auseindernehmen

                  Robert R.
                  1. 0
                    dedlfix
                    1. 0
                      Robert R.
                      1. 0

                        DOMDocument & Co. - insertBefore()

                        Robert R.
                        1. 0

                          DOMDocument & Co. - insertBefore(), Nachtrag

                          Robert R.
                        2. 0
                          Felix Riesterer
                          1. 0
                            Robert R.
                            1. 0
                              Robert R.
                              1. 0

                                Chakka! DOMDocument & Co. - insertBefore() - Teil 1

                                Robert R.
                              2. 0

                                CHAKKA! DOMDocument & Co. - insertBefore() - Teil 2

                                Robert R.
                              3. 0

                                DOMDocument & Co. - nodeValue versa textContent

                                robertroth
                                1. 0
                                  dedlfix
                                  • html
                                  • php
                                  1. 0
                                    robertroth
                                    1. 0

                                      Zeilenumbrüche!

                                      robertroth
                                      • html
                                      • zu diesem forum
                                      1. 0
                                        dedlfix
                                    2. 0
                                      dedlfix
                                    3. 1
                                      Jnnbo
                                      • menschelei
                                      1. 0
                                        robertroth
                              4. 1

                                DOMDocument & Co. - Härte der Klasse: Test nicht bestanden

                                robertroth
                                • html
                                • php
                                1. 0
                                  dedlfix
                                  1. 0
                                    robertroth