/ / Dokument PHP DOM generujący zniekształcony kanał XML - php, xml, dom

Dokument PHP DOM generujący zniekształcony kanał XML - php, xml, dom

Próbuję utworzyć kanał dla Google Merchant za pomocą dokumentu php i DOM.

Kanał zawiera tysiące elementów, ale nie sprawdza poprawności, ponieważ istnieje niewielka liczba przypadków (4/5 na 6000+), w których XML jest zniekształcony, na przykład:

 <g:product_type>Plantsg:product_type>

Generuję w pętli foreach

    //Loop through each plant
foreach($plantList as $plantItem){

//begin item element
$item = $xml->createElement("item");


//Loop through use key as element name and value as data
foreach ($plantItem as $key => $value)
{
//Decode HTML characters, for example "&" becomes  &amp
//to comply with http://www.w3.org/TR/xhtml1/#C_12
$decode = htmlspecialchars_decode($value);
$decode = trim($decode);

if(empty($decode))
continue;

//Create the element
$tag = $xml->createElement($key);
$tag = $item->appendChild($tag);

//Write the field
$text = $xml->createTextNode($decode);
$text = $tag->appendChild($text);

}
$item = $channel->appendChild($item);
}

Oto cały kod generowania xml.

Oto 3 zniekształcone tagi:

g:adwords_grouping>18</g:adwords_grouping>

form>10 ltr pot</form>

title>Buy Helleborus x nigercors</title>

Zdeformowane znaczniki pojawiają się w różnych miejscach, gdy wprowadzam zmiany do kodu. Zwykle brakuje albo

Odpowiedzi:

1 dla odpowiedzi № 1

Dziękujemy wszystkim, którzy próbowali go rozwiązać. Zdeformowane znaczniki zostały umieszczone przez Chrome, gdy napotka problem z kodowaniem.

Widzieć zrzut ekranu z adnotacjami . W tym przypadku otworzył tag, napotkał „ö”, a następnie przewrócił się i nie zamknął tagu.

Nieprawidłowo używam htmlspecialchars_decode, gdy powinienem używać tylko htmlspecialchars, jak wskazuje hakre, ale to zupełnie inny problem.


0 dla odpowiedzi nr 2

Jestem z @aefxx byłoby pomocne, jeśli możeszpodaj kilka wierszy tuż przed i za linią, w której widzisz zniekształcony znacznik otwarcia (wygląda na to, że we wszystkich pokazanych przykładach brakuje tylko jednego znaku w znaczniku otwarcia).