Voor een project ben ik bezig met het maken van een XML parser voor bepaalde bestanden. Deze bestanden worden aangeleverd door de SabNZBD+ server van een gebruiker.
Reeds heb ik een parser gemaakt voor de queue van zo'n server, nu ben ik bezig met een voor de history maar loop hierbij tegen wat problemen aan.
In de XML file wordt er gebruik gemaakt van <slots> en <slot>. Tussen de <slots> tags staan alle items van de geschiedenis en tussen de <slot> tags staan de individuele item's. Nu loopt dit fout omdat er meerdere keren gebruik wordt gemaakt van een <slot> tag binnen één item (en dus <slot>).
Als ik dus nu via een foreach elk slot ga parsen en HTML list tags ga gebruiken krijg ik hier problemen van.
Hier wat sample code:
Een stukje XML:
En de parser so far:
Uiteraard parse ik nog niet alle tags, want ik wil dit probleem eerst opgelost hebben..
Reeds heb ik een parser gemaakt voor de queue van zo'n server, nu ben ik bezig met een voor de history maar loop hierbij tegen wat problemen aan.
In de XML file wordt er gebruik gemaakt van <slots> en <slot>. Tussen de <slots> tags staan alle items van de geschiedenis en tussen de <slot> tags staan de individuele item's. Nu loopt dit fout omdat er meerdere keren gebruik wordt gemaakt van een <slot> tag binnen één item (en dus <slot>).
Als ik dus nu via een foreach elk slot ga parsen en HTML list tags ga gebruiken krijg ik hier problemen van.
Hier wat sample code:
Een stukje XML:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| <?xml version="1.0" encoding="UTF-8" ?> <history> <slots> <slot> <action_line></action_line> <show_details>True</show_details> <script_log></script_log> <meta>None</meta> <fail_message></fail_message> <loaded>False</loaded> <id>10</id> <size>1.12 KB</size> <category>None</category> <pp>D</pp> <completeness>0</completeness> <script></script> <nzb_name>00-think_toy_-_dance_sessions-sat-02-26-2010-talion.nfo.nzb</nzb_name> <download_time>5</download_time> <storage>/Users/timwachter/downloads/complete/00-think_toy_-_dance_sessions-sat-02-26-2010-talion.nfo</storage> <status>Completed</status> <script_line></script_line> <completed>1267375802</completed> <nzo_id>SABnzbd_nzo_H5d6af</nzo_id> <downloaded>1145</downloaded> <report></report> <path>/00-think_toy_-_dance_sessions-sat-02-26-2010-talion.nfo</path> <postproc_time>0</postproc_time> <name>00-think_toy_-_dance_sessions-sat-02-26-2010-talion.nfo</name> <url></url> <bytes>1145</bytes> <url_info></url_info> <stage_log><slot><name>Download</name> <actions><item>Downloaded in 5 seconds at an average of 199B/s</item> </actions> </slot> <slot><name>Repair</name> <actions><item>[00-think_toy_-_dance_sessions-sat-02-26-2010-talion.nfo] No par2 sets</item> </actions> </slot> </stage_log> </slot> </slots> </history> |
En de parser so far:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <?php $url = "sample.xml"; $doc = new DOMDocument(); $doc->load($url); $slot = $doc->getElementsByTagName("slot"); foreach( $slot as $slot ) { $title = $slot->getElementsByTagName( "name" )->item(0)->nodeValue; $size = $slot->getElementsByTagName( "size" )->item(0)->nodeValue; echo "<li class='textbox'>"; echo "<span class='header'>".$title."</span>"; echo "<span class='comment'>".$size."</span>"; echo "</li>"; } ?> |
Uiteraard parse ik nog niet alle tags, want ik wil dit probleem eerst opgelost hebben..