Avatar billede dennism Nybegynder
24. december 2009 - 18:20 Der er 12 kommentarer og
1 løsning

PHP: Ændre XML-fil dynamisk

Jeg vil i PHP gerne indlæse f.eks. en rssfeed.xml-fil og bruge et framework til at tilføje et nyt item til rssfeed.xml og gemme det.
Hvad kan jeg bruge til dette?
Avatar billede arne_v Ekspert
24. december 2009 - 18:55 #1
DOMDocument var en oplagt mulighed.
Avatar billede dennism Nybegynder
27. december 2009 - 15:05 #2
Hej Arne,

Jeg har kigget lidt på det men har lidt problemer med at få det til at virke. Jeg sidder med et example RSS feed som dette:
http://www.rss-tools.com/rss-example.htm

Og forsøger at tilføje en ny item-node til feedet på denne måde:
<?php
$doc = new DOMDocument();
$doc->load('rssfeed.xml' );
$doc->formatOutput = true;

$item = $doc->createElement("item");
$title = $doc->createElement("title");
$title->appendChild($doc->createTextNode("Example title"));
$item->appendChild( $title );

$channel = $doc->getElementsByTagName("channel");
$channel->appendChild($item);

$doc->saveXML();
?>

Selvom jeg kører en saveXML til sidst, bliver der ikke ændret noget i feedet. Kan du se, hvad der går galt?
Avatar billede dennism Nybegynder
27. december 2009 - 15:48 #3
Jeg fandt en løsning. Vil du smide et svar?
Avatar billede arne_v Ekspert
27. december 2009 - 15:56 #4
OK
Avatar billede dennism Nybegynder
27. december 2009 - 18:38 #5
Jeg har sat encoding på mit DOCDocument til UTF-8 og det feed der bliver genereret har den korrekte encoding i XML-tagget i toppen af siden. Men åbner jeg mit feed.xml i f.eks. Notepad++ står encoding til ANSI, selvom det burde være UTF-8. Hvordan får jeg den til det?

På forhånd tak.
Avatar billede arne_v Ekspert
27. december 2009 - 20:02 #6
Er non-ASCII tegn som f.eks. ÆØÅ som de skal være n¨år du kigger i Notepad++ ?
Avatar billede dennism Nybegynder
27. december 2009 - 20:19 #7
Ja, det er de. Men non-ASCII er "grimme" når f.eks feed'et vises i Firefox. Når encodingen er angivet til UTF-8 i XML declerationen i toppen, skal selve filen vel også være i UTF-8? Tænker det kan være opsætningen af Apache/PHP der er skyld i det..
Avatar billede arne_v Ekspert
27. december 2009 - 20:25 #8
Hvis ÆØÅ er korrekte, så er det nok fordi at de er i ANSI !

To muligheder:

1) angiv encoding i XML prolog til ISO-8859-1

2) behold UTF-8 men konverter das ganze molevitten til UTF-8
Avatar billede dennism Nybegynder
27. december 2009 - 21:06 #9
Jeg forsøger metode 1, men måtte så køre en htmlentities, for at DOMDocument kunne gemme mit XML-dokument. Jeg oplever så nu, at description er som den skal være, når den vises i Firefox, men title ser underlig ud - bliver de læst forskelligt? De er begge kørt igennem en htmlentities..
Avatar billede arne_v Ekspert
27. december 2009 - 21:27 #10
HTML entities og XML lyder ikke som en god combo.
Avatar billede arne_v Ekspert
27. december 2009 - 21:28 #11
Hvordan ser din kode ud nu?
Avatar billede dennism Nybegynder
27. december 2009 - 21:55 #12
Problemet er, at hvis jeg vælger iso-8859-1 som encoding til mit DOMDocument og har nogle elementer som  indeholder Æ, Ø eller Å, så får jeg en fejl i stil med denne, når jeg gemmer med save:
output conversion failed due to conv error, bytes 0xC6 0xD8 0xC5 0x3C

En htmlentities afhjalp dette problem men giver så nogle problemer når feed'et vises. Ved du, hvad ovenstående fejl skyldes?
Avatar billede dennism Nybegynder
27. december 2009 - 22:02 #13
utf8_encode hjalp mig :)
Mange tak for din hjælp!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester