Autor Zpráva
kopi
Profil
Zdravím, mám problém s xml feedem pomocí php a mysql. mám udělaný feed a při jedné položce to funguje, při více položkách dostávám chybu:

"This page contains the following errors:

error on line 2 at column 1: Extra content at the end of the document
Below is a rendering of the page up to the first error."

Myslel jsem, že kdyby byla chyba někde v headers apod, tak by to nefungovalo vůbec a dostával bych i php error.

<?
include('../includes/db.php');

//Create element a appendChild()

header('Content-type: application/xml');

$xml = new DOMDocument("1.0", "UTF-8");
$xml->formatOutput=true;

$leasing = $xml->createElement('leasing');
$xml->appendChild($leasing);

$xmlns = $xml->createAttribute('xmlns');
$leasing->appendChild($xmlns);

$value = $xml->createTextNode('urn:x-driveto.cz:leasing:feed:v1');
$xmlns->appendChild($value);


$carOffers = $xml->createElement("carOffers");
$leasing->appendChild($carOffers);


// dotaz na databázi
$query = "...";
           
$result = mysqli_query($conn, $query);


while($row=mysqli_fetch_assoc($result))
{
    
    
    
    // ------------------------ začátek feedu ----------------------------//
    
    $carOffer=$xml->createElement("carOffer");
    $carOffers->appendChild($carOffer);
    
       $partnerCarOfferId=$xml->createElement("partnerCarOfferId",$row['id_auto']);
       $carOffer->appendChild($partnerCarOfferId);
    
       $car=$xml->createElement("car");
       $carOffer->appendChild($car);
    
        $carSpecification=$xml->createElement("carSpecification");
        $car->appendChild($carSpecification);
    
            $make=$xml->createElement("make",$row['nazev']);
            $carSpecification->appendChild($make);
            $modelLine=$xml->createElement("modelLine",$row['model']);
            $carSpecification->appendChild($modelLine);
            $modelLineYear=$xml->createElement("modelLineYear",$row['rok_modelu']);
            $carSpecification->appendChild($modelLineYear);
            $modelLineMonth=$xml->createElement("modelLineMonth","1");
            $carSpecification->appendChild($modelLineMonth);
            $trim=$xml->createElement("trim",$row['vybava']);
            $carSpecification->appendChild($trim);
            $engineVolume=$xml->createElement("engineVolume",$engineVolume);
            $carSpecification->appendChild($engineVolume);
            $engineSuffix=$xml->createElement("engineSuffix",$engineSuffix);
            $carSpecification->appendChild($engineSuffix);
            $enginePowerKw=$xml->createElement("enginePowerKw",$vykonKW);
            $carSpecification->appendChild($enginePowerKw);
            $engineType=$xml->createElement("engineType",$engineType);
            $carSpecification->appendChild($engineType);
            $is4x4=$xml->createElement("is4x4",$is4x4);
            $carSpecification->appendChild($is4x4);
            $isAutomaticTransmission=$xml->createElement("isAutomaticTransmission",$isAutomaticTransmission);
            $carSpecification->appendChild($isAutomaticTransmission);
    
        
}

ob_clean(); //Clean (erase) the output buffer
echo $xml->saveXML();

?>
Tomášeek
Profil
kopi:
A to vygenerovane XML vypada jak?
kopi
Profil
Pro jeden záznam vypadá správně, pro více záznamů to hodí jen error a bílou stránku.
Tomášeek
Profil
kopi:
Tak znovu. Jak to vygenerované XML vypadá? To znamená vložit sem to XML s více než jedním produktem, aby se v něm dala najít chyba.
kopi
Profil
A mohl bys mi poradit, jak ho mám zobrazit? Když nactu URL, tak se nic nezobrazí.
Tomášeek
Profil
kopi:
To netuším.

Možná si dumpnout $xml a zkusit to tam někde najít (před tím saveXML)? Případně nějak jinak, i práce s DOMem a XML musí mít způsob, jaký lze debugovat.
Kajman
Profil
Pro debug si můžete vracet content-type text/plain, pokud si výsledek z url neumíte uložit či zobrazit ve vývojářské konzoli prohlížeče.

Pro debug si nečistěte output buffer a povolte varovné hlášky, jinak byste byl asi varován, že na řádku 60 používáte neinicializovanou proměnnou. Která se navíc použije v dalším průchodu.
$engineVolume=$xml->createElement("engineVolume",$engineVolume);
Podobných chyb tam je na první pohled více.
kopi
Profil
Moc děkuju. Když jsem dal content-type text/plain, tak se mi zobrazila jasně vypsaná chyba a na jakém řádku, pak už to bylo lehké opravit. Moc děkuju.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0