Toon posts:

[php] nu.nl xml parsen en titels eruit halen.

Pagina: 1
Acties:
  • 41 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik wil uit de webservice van nu.nl de titels halen. Ik kan nu wel de types eruit halen met het volgende:

PHP:
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
$file = "http://nu.nl/deeplink_xml";
$depth[0] = "";

function startElement($parser, $name, $attrs) 
{
   global $depth;
   for ($i=0; $i<$depth[$parser]; $i++)
   {
       echo "  ";
   }
   print_r($attrs);
   echo "$name\n";
   $depth[$parser]++;
}

function endElement($parser, $name) 
{
   global $depth;
   $depth[$parser]--;
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r")))
{
    die("could not open XML input");
}

while ($data = fread($fp, 4096))
{
   if (!xml_parse($xml_parser, $data, feof($fp))) 
   {
       die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
   }
}
xml_parser_free($xml_parser);


Ik heb zo het vermoeden dat ik een gedachtenswitch moet maken. Ik snap namelijk niet precies hoe en waarom startElement() aangeroepen wordt. Ik wil de titels gewoon in een array drukken. Het zou helemaal mooi zijn als dat per categorie kan ( dus binnenlands nieuws, buitenlands nieuws, etc.)

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Wat heb je al geprobeerd behalve een voorbeeld van php.net copy-pasten?
En zie hier waarom startElement en endElement aangeroepen worden.
Element events are issued whenever the XML parser encounters start or end tags. There are separate handlers for start tags and end tags.

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Verwijderd

Waar ik heel lang naar gezocht heb is de volgende 'theorie'.

XML Parsen:

De XML parser is een pointer die door je XML data heen loopt.

Zodra hij een TAG tegen komt die opent (bijv. <document> of <section> ) dan roept hij de functie startElement (standaard) aan met een drietal variabelen:
de parser, de naam van de TAG (document, section) en de eventuele atributen (in jouw code zijn dit de href's en hun waarde).

Het is aan jou om te bepalen wat je dan doet met de functie startElement.

Vervolgens zorg je dat er een functie aangeroepen wordt die de data tussen de TAGS verwerkt (dus alles wat bijvoorbeeld staat tussen <document> en </document>).

In je pars-code even dit neerzetten:
PHP:
1
xml_set_character_data_handler($xml_parser, "characterData");


Vervolgens roept de parser iedere keer als hij data tegenkomt de functie characterData() aan.

Het is aan jou om te bepalen wat je er mee doet :)

Hij stuurt overigens twee var's mee als hij die funtie aanroept: de doel-parser en de data.

Als laatste is er de funcite endElement, die gedraagt zich hetzelfde als de startfunctie, alleen wordt deze aangeroepen zonder attributen-variabele en als er een eind TAG is (dus iets als </document> of </section>).

Het is aan jou om te bepalen wat je doet per aanroep van een van deze functies.
Er zijn talloze artikelen te vinden.

PS

Ik ga er zo diep op in omdat ik ook nog maar sinds korte tijd er mee werk en hoop dat ik je zo toch ietwat opweg help, aangezien het vrij pittig is in den beginne.
Succes.

Verwijderd

Topicstarter
Hell yeah. Dat was de gedachtenswitch die ik nodig had. Nu kan ik er wel mee verder. Bedankt voor je heldere uitleg. Ik hoop dat meer mensen dit tegen komen en er wat aan hebben . Thanks. _/-\o_

  • Possstema
  • Registratie: Juli 2002
  • Laatst online: 10-03 22:48
Dat is allemaal wel heel mooi maar toch werkt mijn volgende script niet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Get XML file
$xml_location = "http://www.tweakers.net/feeds/nieuws.xml";
$xml = file_get_contents($xml_location);

// Create Parser
$xml_parser = xml_parser_create();
xml_parse($xml_parser, $xml);

// Create function for begin element
function begin_element($parser, $name, $attribs)
{
    echo $name, " = ";
}

// Create function for end element
function end_element($parser, $name, $attribs)
{ }

// Start output for Element's
xml_set_element_handler($xml_parser, "begin_element", "end_element");

?>

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Het is niet de bedoeling dat wij hier jouw script gaan debuggen.

Code plakken, en het werkt niet roepen is not done als je niet aangeeft wat er precies niet werkt, en wat je zelf al geprobeerd hebt om het op te lossen.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.