[php] xml parser probleem met feof

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een een php file om de xml uit te lezen, deze data komt uit een beveiligde xml file, die ik helaas dus niet direct kan openen. Deze file openen geeft geen problemen de xml pagina die je te zien krijgt komt terug in een variabele ($data2).

Maar nu wil ik uit deze variabele die ik krijg maar een aantal dingen hebben (titel, plaats en description) hiervoor heb ik het volgende script:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
// Variables
$file = "file.xml";
$feed = array();
$key = "";
$info = "";
$in_HEAD = false;

function startElement($xml_parser, $name, $attrs ) {
  global $feed, $key, $in_HEAD;
  $key = $name;
  if( $name == "HEAD" )
   $in_HEAD = true; }

function endElement($xml_parser, $name) { 
// The Workhorse of the Call Back Functions
// Most of the programming will be put in this function.

  global $feed, $key, $info, $in_HEAD; 
                                           
  if( $name == "HEAD" )                    
   $in_HEAD = false;                        
  if($in_HEAD==false)
   $key = $name;
  elseif( $in_HEAD )
   $key = "HEAD_".$name;
  
  $feed[$key] = $info;
  $info = ""; }

function charData($xml_parser, $data ) {
  // $xml_parser - The resource ID for this parser
  // $data - The character data returned by the parser, from the XML file
  global $info;
  $info .= $data; }

// The Beginning of Execution

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "charData" );
$fp = fopen($file, "r");
while ($data = fread($fp, 8192))
  !xml_parse($xml_parser, $data, feof($fp));
xml_parser_free($xml_parser);

// Start aanmaken variabelen
foreach( $feed as $assoc_index => $value )
  {
if($assoc_index == CITY) {
   $city = "$value";
  }
elseif($assoc_index == NAME) {
   $name = "$value";
  }
elseif($assoc_index == DESCRIPTION) {
   $description = "$value";
  }
}
echo"<b><u>$name</u></b><br>";
echo"<i>$city</i><br><br>";
echo"$description<br><br>";
?>

Als ik de data die ik krijg met $data2 in file.xml zet krijg ik netjes de waarden die ik wil op de pagina te zien alleen krijg ik hem niet zover dat die gelijk de data uit $data2 leest ipv uit een file.

Ik heb ook al via de search gezocht en in de manual maar kan nix vinden

Weet iemand wat ik fout doe?

[ Voor 12% gewijzigd door Verwijderd op 22-08-2004 11:47 ]


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-09 18:27

pjvandesande

GC.Collect(head);

Mag er eerst even een 'code-tag' om je code en lees de faq nog is door. Daarna lees ik de gehele post nog is.

Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Wat is $data2 dan precies? Is dat de xmlfile ingelezen als string, of een filepointer? |:(

Volgens mij ligt het probleem hierin:
PHP:
1
while ($data = $data2)

Als je goed kijkt naar de orginele lijn zal je daar opmerken dat fread per 8192 bytes de file in leest, totdat de file aan het einde is. Als je dus die regel wijzigt naar jouw regel zal ie natuurlijk in een oneindige loop $data2 aan $data toewijzen omdat $data2 niet een eindig is. (tenzij je binnen de while loop $data2 op false zet natuurlijk)

[ Voor 73% gewijzigd door Banpei op 21-08-2004 13:51 ]

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Banpei schreef op 21 augustus 2004 @ 13:45:
Wat is $data2 dan precies? Is dat de xmlfile ingelezen als string, of een filepointer? |:(

Volgens mij ligt het probleem hierin:
PHP:
1
while ($data = $data2)

Als je goed kijkt naar de orginele lijn zal je daar opmerken dat fread per 8192 bytes de file in leest, totdat de file aan het einde is. Als je dus die regel wijzigt naar jouw regel zal ie natuurlijk in een oneindige loop $data2 aan $data toewijzen omdat $data2 niet een eindig is. (tenzij je binnen de while loop $data2 op false zet natuurlijk)
$data2 is een string met de hele xml pagina,

PHP:
1
while ($data = $data2)


was een testje (moet toch wat proberen ;) )

De bedoeling is om dat fopen en feof gedoe uit dit script te krijgen en te hem deze data uit $data2 laten halen, maar als ik dat probeer krijg ik telkens fouten met feof als ik dat bv vervang door true (staat op php.net) werkt het ook niet.