[PHP] Header whitespace niet weg te halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik zit met dit dilemma, ik heb een MySQL 2 XML parser, en nu zit ik met het probleem dat ik aan de bovenkant van me XML document 2 lege whitespaces heb en een spatie.

Nu is het probleem dat ik deze met geen mogelijkheid er tussenuit krijg.

op plaats 1 en 2 zitten dus deze 2 enters en spaties

PHP:
1
2
3
4
5
6
7
8
9
10
 1
2
<?xml version="1.0" encoding="utf-8"?>
<aanbiedingen>
<artikel>
    <id>9299</id>
    <omschrijving>Logitech Internet Navigator Keyboard PS/2-USB</omschrijving>
    <stuksprijs>blingbling</stuksprijs>
</artikel>
</aanbiedingen>


Ik heb in het index document een header meegestuurd zodat de browser kan weten dat het een XML document is.
"header("Content-type: text/xml");"

Daarnaast zijn er totaal geen enters \n \t \r e.d. in de class opgenomen voor de </?xml versioon="1.0".....


Weten jullie misschien hoe het komt dat deze 2 enters/whitespaces en een spatie er in staan, en hoe ik deze eruit kan krijgen.

:/

[ Voor 10% gewijzigd door Verwijderd op 30-10-2003 14:43 . Reden: spelcheck ]


Acties:
  • 0 Henk 'm!

Verwijderd

Misschien is het een idee om je code te posten die de xml genereert?

Acties:
  • 0 Henk 'm!

Verwijderd

met een tekst editor!
je kan dit natuurlijk ook gewoon doen door de bovenste 2 regels met php weg te halen. niet de netste oplossing maar hey het blijft php;p

of door die parser te debuggen...

werken deze oplossingen niet voor jou, dan verwijs ik naar www.de-cristalle-bol.nu

Acties:
  • 0 Henk 'm!

  • creative8500
  • Registratie: September 2001
  • Laatst online: 01-02 14:14

creative8500

freedom.

Wellicht moet je in deze hoek een workaround zoeken:
PHP:
1
2
3
4
5
ob_start ();
$xmlThing -> doXMLoutput ();
$content = ob_get_contents ();
ob_end_clean ();
echo str_replace ("\n\n<?", "", str_replace ("\r\n\r\n<?", "", $content));

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 30 oktober 2003 @ 14:54:
Misschien is het een idee om je code te posten die de xml genereert?
OK,

index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
header("Content-type: text/xml");
echo "bla";
require('MySql2XML_class.php');

$table = "artikelen";
$sql = "select id, omschrijving, stuksprijs from $table where aanbieding = 1";
$XML_File = new XMLDefinition($sql, "aanbiedingen", "$XMLspec","artikel","utf-8");

$XML_File->ChangeNodeName("aanbiedingen","");
$XML_File->ChangeNodeName("prijs","");
$XML_File->ShowXML();
?>


MySql3XML_class.php
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?
class XMLDefinition
{
  var $XMLRootName;
  var $XMLSpecName;
  var $XMLRecordNodeName;
  var $SQLString;
  var $Encoding;

  function XMLDefinition( $SQLString, $XMLRoot, $XMLspec, $XMLRecord = "record", $Enc = ""){
     $this->DataBaseHost        = "localhost";
     $this->DataBaseName        = "db";
     $this->UserName            = "root";
     $this->Password            = "";
     $this->XMLRootName         = $XMLRoot;
     $this->XMLSpecName         = $XMLspec;
     $this->XMLRecordNodeName   = $XMLRecord;
     $this->Encoding            = $Enc;
     $this->SQL                 = $SQLString;
  }

  function ChangeNodeName($OriginalName, $NewName){
    $this->Arr_ChangeNode[$OriginalName] = $NewName;
  }

  function Add_Attribute($NodeName,$Attribute){
    $this->ARR_Attribute[$NodeName] = $Attribute;
  }

  function Array_Replace_Nodenames($a, $tofind, $toreplace){
    foreach ($a as $key => $val){
      $val = trim($val);
      if ($tofind == $val){
        $a[$key] = $toreplace;
      }
    }
    return $a;
  }

function Create_Nodes(){
    $this->fields = preg_replace("/^select\s*/", "", $this->SQL);
    $this->fields = preg_replace("/\s*from.*/", "", $this->fields);
    $this->ARR_fields = explode(",",$this->fields);

    foreach($this->Arr_ChangeNode as $key2 => $val2){
      $this->ARR_fields = $this->Array_Replace_Nodenames($this->ARR_fields, $key2, $val2);
    }

    foreach($this->ARR_fields as $key3 => $val3){
      if ($this->ARR_Attribute[$val3]!=""){
        $ARR_explode_att = explode("=>",$this->ARR_Attribute[$val3]);
        $this->ARR_fields[$key3] = $val3 . " " . $ARR_explode_att[0] . '="' . $ARR_explode_att[1] . '"';
      }
    }
  }
  function ShowXML(){
  $this->Create_Nodes();
    $db = mysql_connect($this->DataBaseHost,$this->UserName,$this->Password);
    mysql_select_db($this->DataBaseName,$db);
    $result = mysql_query($this->SQL);

    $xml .= "<?xml version=\"1.0\" encoding=\"" . $this->Encoding . "\"?". ">\r";
    $xml .= "<" . $this->XMLRootName . "" . $this->XMLSpecName . ">\r";

    while($row = mysql_fetch_row($result)){
      reset($this->ARR_fields );

      $xml .= "<" . $this->XMLRecordNodeName . ">\r";
      foreach ($this->ARR_fields as $key => $val){
        $val = trim($val);

        $xml .= "\t<" . $val . ">";
        $xml .= $row[$key];
        $first_val = explode(" ",$val);
        $xml .= "</" . $first_val[0] . ">\r";
      }
        $xml .= "</" . $this->XMLRecordNodeName . ">\r";
    }
    $xml .= "</" . $this->XMLRootName . ">\r";

    $this->XML = $xml;

    print $this->XML;
  }
}?>

Acties:
  • 0 Henk 'm!

  • creative8500
  • Registratie: September 2001
  • Laatst online: 01-02 14:14

creative8500

freedom.

Voeg deze code eens toe aan je script:
PHP:
1
2
//Report all PHP errors (bitwise 63 may be used in PHP 3)
error_reporting (E_ALL);

Er zijn zo even een aantal dingen die mij opvallen:
PHP:
1
2
3
4
5
/*regel 81: */ $this->XML = $xml;
// ik zie nergens "var $XML" staan

/* regel 62: */ $xml .= "<?xml version=\"1.0\" encoding=\"" . $this->Encoding . "\"?". ">\r";
// ik zie niet dat $xml al is gedeclareerd, dus je moet $xml = "....."; gebruiken.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik gok dat je ergens in een .php file 2 whitespaces hebt staan voor je openingstag "<?".

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Grijze Vos schreef op 31 oktober 2003 @ 08:34:
Ik gok dat je ergens in een .php file 2 whitespaces hebt staan voor je openingstag "<?".
Ik gok op het omgekeerde.. Ik denk namelijk dat het juist is dat er achteraan de file 'MySql2XML_class.php' nog extra regels staan na de ?>

Wat dus in principe neerkomt dat het output is voor de rest van de XML output.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Grijze Vos schreef op 31 oktober 2003 @ 08:34:
Ik gok dat je ergens in een .php file 2 whitespaces hebt staan voor je openingstag "<?".
Nee die staan er niet want anders had ik deze hele vraag niet gesteld. B)
dusty schreef op 31 oktober 2003 @ 09:41:
[...]

Ik gok op het omgekeerde.. Ik denk namelijk dat het juist is dat er achteraan de file 'MySql2XML_class.php' nog extra regels staan na de ?>

Wat dus in principe neerkomt dat het output is voor de rest van de XML output.
Sjips nu ga ik weg voor gaas: Idd er stonden onderaan de MySql2XML_class.php 2 enters en een spatie die ik perongeluk neergezet heb.

En natuurlijk helemaal niet nadenken dat er eest een class wordt afgewerkt en daarna pas in de index.php geplaatst wordt, daarom stonden ze bovenaan.

Een onthouder voor volgende keer als er bestanden geinclude worden.

Thanx Dusty (8>

[ Voor 3% gewijzigd door Verwijderd op 31-10-2003 16:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 31 oktober 2003 @ 16:28:
[...]


Nee die staan er niet want anders had ik deze hele vraag niet gesteld. B)


[...]


Sjips nu ga ik weg voor gaas: Idd er stonden onderaan de MySql2XML_class.php 2 enters en een spatie die ik perongeluk neergezet heb.

En natuurlijk helemaal niet nadenken dat er eest een class wordt afgewerkt en daarna pas in de index.php geplaatst wordt, daarom stonden ze bovenaan.

Een onthouder voor volgende keer als er bestanden geinclude worden.

Thanx Dusty (8>
AHH delete is niet mogelijk, i pushed the #$!@$ wrong button! |:(

[ Voor 7% gewijzigd door Verwijderd op 31-10-2003 16:31 ]

Pagina: 1