2016-06-12 13 views
0

Ich versuche, große XML-Dateien zu verarbeiten mit XMLReader zu beginnen, aber ich bin eine seltsame HTTP 400 Bad Request bekommen, wenn ich versuche, den folgenden Code auszuführen:PHP XMLReader 400 Bad Request

<?php 
$reader = new XMLReader(); 
$reader->open ("testfile.xml"); 
while ($reader->read()) { 
    switch ($reader->nodeType) { 
     case (XMLREADER::ELEMENT) : 
      echo "&lt;" . $reader->name . "&gt; <br>"; 
      break; 
     case (XMLREADER::TEXT) : 
      if ($reader->hasValue) { 
       echo $reader->value . "<br>"; 
      } 
      break; 
    } 
} 
$reader->close(); 
?> 

I auch es auf diese Weise versucht hat und die gleichen 400 Bad Request Fehler:

<?php 
$reader = new XMLReader(); 
$reader->open ("testfile.xml"); 
while ($reader->read()) { 
    switch ($reader->nodeType) { 
     case (XMLREADER::ELEMENT) : 
      echo "&lt;" . $reader->name . "&gt; <br>"; 
      $reader->read(); 
      if (($reader->nodeType == XMLREADER::TEXT) && $reader->hasValue) { 
       echo $reader->value . "<br>"; 
      } 
      break; 
    } 
} 
$reader->close(); 
?> 

In beiden Fällen geht der Fehler weg, wenn ich echo reader->value ."<br>"; Kommentar aus. Apache-Fehlerprotokolle zeigen nichts an. Trotz des 400-Fehlers wird die Seite wie erwartet mit den Elementen und Textwerten erzeugt und gerendert (d. H. Der Code scheint zu funktionieren, er gibt nur einen HTTP-Fehler).

Es ist auch erwähnenswert, dass es scheint, ohne Fehler auf einer kleinen, einfachen Test-XML-Datei mit nur einem Stamm- und einem Kindelement mit Text zu funktionieren. Es ist nur auf der größeren komplizierteren XML-Datei, die ich eigentlich verarbeiten möchte, dass ich den Fehler erhalte.

Vielen Dank im Voraus für jede Hilfe!

Antwort

0

FYI für den Fall, dass jemand anderes in dies läuft, fand ich heraus, ich brauchte htmlspecialchars(), um den Wert zu entkommen. Ich änderte:

echo $reader->value . "<br>"; 

zu

echo htmlspecialchars($reader->value, ENT_XML1, 'UTF-8') . "<br>"; 

Raten muss es einige html in der XML sein, dass der Browser verursacht die 400-Fehler zu interpretieren versuchte.