Skip to content

Instantly share code, notes, and snippets.

@blar
Created July 29, 2012 19:49
Show Gist options
  • Select an option

  • Save blar/3201469 to your computer and use it in GitHub Desktop.

Select an option

Save blar/3201469 to your computer and use it in GitHub Desktop.
<?php
$content = '
<table><tr><td>00:00:00</td><td>Anfang</td></tr><tr><td>00:00:07</td><td>Mit Marcel</td></tr><tr>
<td>00:00:16</td><td>und Martin</td></tr><tr><td>00:00:41</td><td>Tiny Wings</td></tr><tr><td>00:03:53</td><td>
<a href="http://dealbook.nytimes.com/2012/07/16/googles-marissa-mayer-tapped-as-yahoos-chief/?hp&amp;pagewanted=all"
target="_blank">Marissa Mayer wir Yahoo CEO</td></tr><tr><td>00:10:20</td><td><a href="http://dearmarissamayer.com"
target="_blank">dearmarissamayer.com</td></tr><tr><td>00:13:01</td><td><a
href="https://hacks.mozilla.org/2012/07/firefox-beta-15-supports-the-new-opus-audio-format/" target="_blank">Firefox
15 mit Opus</td></tr><tr><td>00:20:45</td><td><a href="http://www.youtube.com/watch?v=zA_0_dSD3-Q" target="_blank">Durch
die Nacht mit Jason Rohrer</td></tr><tr><td>00:29:42</td><td><a
href="https://www.spiele-offensive.de/index.php?cmd=spieleschmiede&amp;cfid=1" target="_blank">Express 01</td></tr><tr>
<td>00:34:39</td><td><a href="http://www.mariancalladventurequest.com" target="_blank">Marian Call</td></tr><tr>
<td>00:36:13</td><td>Instacast Kritik</td></tr><tr><td>00:40:33</td><td>iPhoto Versionen</td></tr><tr><td>00:43:05</td>
<td>Online Office</td></tr><tr><td>00:45:23</td><td>iOS Programmieren ohne Macs?</td></tr><tr><td>00:46:26</td>
<td>Schutzfolien</td></tr><tr><td>00:48:51</td><td>Jailbreak</td></tr><tr><td>00:53:09</td><td>Netzwerkprobleme</td>
</tr><tr><td>00:57:20</td><td>Mediaserver</td></tr><tr><td>01:02:08</td><td>Marcels lustige Tipp-Kiste</td></tr><tr>
<td>01:04:24</td><td><a href="http://itunes.apple.com/gb/app/chirp/id529469280?mt=8" target="_blank">Chirp</td></tr><tr>
<td>01:09:27</td><td><a href="http://www.youtube.com/watch?v=MokNvbiRqCM" target="_blank">Rausschmeisser</td></tr>
</table><p>Hello World</p>';
class RecursiveDOMIterator extends RecursiveArrayIterator {
public function __construct($node) {
parent::__construct(iterator_to_array($node->childNodes));
}
public function getChildren() {
return new self($this->current());
}
public function hasChildren() {
return $this->current()->hasChildNodes();
}
}
$document = new DOMDocument();
$document->loadHTML($content);
$body = $document->getElementsByTagName('body')->item(0);
$iterator = new RecursiveDOMIterator($body);
$recursiveIterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach($recursiveIterator as $node) {
switch($node->nodeType) {
case XML_ELEMENT_NODE:
echo PHP_EOL, str_repeat(' ', $recursiveIterator->getDepth()), $node->tagName, ':';
break;
case XML_TEXT_NODE:
if(trim($node->nodeValue)) {
echo ' ', trim($node->nodeValue);
}
break;
}
}
echo PHP_EOL;
?>
table:
tr:
td: 00:00:00
td: Anfang
tr:
td: 00:00:07
td: Mit Marcel
tr:
td: 00:00:16
td: und Martin
tr:
td: 00:00:41
td: Tiny Wings
tr:
td: 00:03:53
td:
a: Marissa Mayer wir Yahoo CEO
tr:
td: 00:10:20
td:
a: dearmarissamayer.com
tr:
td: 00:13:01
td:
a: Firefox
15 mit Opus
tr:
td: 00:20:45
td:
a: Durch
die Nacht mit Jason Rohrer
tr:
td: 00:29:42
td:
a: Express 01
tr:
td: 00:34:39
td:
a: Marian Call
tr:
td: 00:36:13
td: Instacast Kritik
tr:
td: 00:40:33
td: iPhoto Versionen
tr:
td: 00:43:05
td: Online Office
tr:
td: 00:45:23
td: iOS Programmieren ohne Macs?
tr:
td: 00:46:26
td: Schutzfolien
tr:
td: 00:48:51
td: Jailbreak
tr:
td: 00:53:09
td: Netzwerkprobleme
tr:
td: 00:57:20
td: Mediaserver
tr:
td: 01:02:08
td: Marcels lustige Tipp-Kiste
tr:
td: 01:04:24
td:
a: Chirp
tr:
td: 01:09:27
td:
a: Rausschmeisser
p: Hello World
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment