LINUXSOFT.cz
Nazwa użytkownika: Hasło:     
    CZ UK PL

> Komentarze :: Poradna XML v PHP

XML v PHP 9.9.2008 21:26
Gaudentius

Ahoj, potřeboval bych vytvořit dokument XML v php - kliknutím na xml.php aby se zobrazil xml dokument.

Mám tento kód:

<?php
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \n";




echo ("<obce>\n");

echo ("\t<obec>\n");
echo ("\t\t<psc>\n");
echo ("\t\t\t PSC \n");
echo ("\t\t</psc>\n");
echo ("\t\t<nazev>\n");
echo ("\t\t\t OBEC \n");
echo ("\t\t</nazev>\n");
echo ("\t</obec>\n");

echo ("</obce>\n");




?>

Ale vypíše mi to:

Chyba parsování XML: Na začátku externí entity chybí procesní instrukce xml
Adresa: http://127.0.0.1/xml.php
Číslo řádku 3, sloupec 1:<?xml version="1.0" encoding="UTF-8" ?>
^

Nevíte, prosím, kde dělám chybu - chci takto jednoduše vypsal xml. Díky :-)

Re: XML v PHP 10.9.2008 00:13
Aleš Hakl

Kouknete se, co presne je vystupem toho skriptu. To chybove hlaseni vypada, jako ze pochazi od prohlizece, ktery ten vystup nepovazuje za platne XML. "Externi entita" je XMLstina pro "soubor ktery obsahuje nejaky kus XML dokumentu", v typickem pripade cely dokument.

Sice nepravdepodobne ale presto voditko by mohlo byt to cislo radku: 3. Co je na tech dvou radcich pred tim? (me chapani XML je takove, ze i pokud jsou prazdne, tak by to mohlo vadit)

Re: XML v PHP 10.9.2008 17:39
Roman
Generovanie XML by malo byť nasledovné a pritom samotný XML strom nemusí byť vypisovaný pomocou 'echo':

<?php

/* subor: xml.php */

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Transfer-Encoding: binary");
header("Content-Type: text/xml");
header("Content-Disposition: attachment; filename=\"nazov_suboru.xls\"");

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";

?>
<obce>
   <obec>
      <psc>PSC</psc>
      <nazev>OBEC</nazev>
   </obec>
</obce>

Re: XML v PHP 11.9.2008 00:02
Aleš Hakl

Tak to mi tedy vysvetelete, jak s generovanim XML souvisi ty Cache-Control, a proc o tom vystupu prohlizeci tvrdite, ze je to priloha s nazvem koncicim na .xls. (a hlavne, jak se to s vyjimkou techto irelevantnich detailu od puvodniho kodu lisi)

Re: XML v PHP 11.9.2008 18:32
Roman

Nuž, beriem späť že by generovanie malo byť nasledovné. Nie, nemusí a postačí ako je to v pôvodnom dotaze.

Cache-Control tam používam preto, lebo sa mi hlavne pri IE6 stalo, že pri opakovanom dotaze sa zobrazili predošlé dáta. Až po následnom refreshe alebo vymazaní dočasných súborov, boli aktuálne dáta. Neviem či je to správne, ale pri takomto použití som už žiadne také problémy nemal.

Súbor xls som použil len na ukážku. Dosť často generujem dáta do šablóny excelu, uloženej ako XML. Takto sa klientovi zobrazia dáta priamo v exceli a môže s nimi ihneď následne pracovať. Samozrejme, ak chce niekto iba čistý xml súbor, môže to vynechať.

Čo sa týka Vášho predošlého príspevku, asi máte pravdu s tým prázdnym riadkom na začiatku. Pokiaľ je na začiatku súboru pred '<?xml version="1.0" encoding="UTF-8"?>' akýkoľvek prázdny riadok, vráti to uvedenú chybu. Platí to aj vtedy ak je to php súbor a pred '<?php' je tiež prázdny riadok.

 

Re: XML v PHP 11.9.2008 18:48
Aleš Hakl

Jeste me napadla druha vec, ono je take mozne ze ten prohlizec ma v te chybove hlasce prohozene cislo sloupce a radku (coz si matne pamatuji, ze kdysi Gecko delalo) a neni to o tom ze tam je prazdny radek, ale o tom, ze tam nejaky uzasny editor jehoz autori zase jednou pochopili utf-8 vklada BOM.

Re: XML v PHP 11.9.2008 19:40
Roman

S tým UTF neviem. Vyskúšal som urobiť napríklad rovnaký súbor v UTF-8 formáte aj vo WINDOWS-1250. Použil som Dreamweaver, PSPad aj UltraEdit. A výsledok s chybou rovnaký.

Re: XML v PHP 11.9.2008 20:13
Aleš Hakl

No ja to myslel tak, ze i pokud tam ten prazdny radek neni, tak nektere uzasne editory (treba notepad z ledasktere verze windows) maji tendenci vkladat na zacatek utf-8 souboru sekvenci 0xef 0xbb 0xbf, ktera by mohla vadit.

A pohled do specifikace rika, ze wellformed XML 1.1 musi zacinat sekvenci '<?xml version="1.1"' (dusledek produkci 1, 22, 23 a 24), v pripade XML 1.0 neni XML deklarace povinna, ale pokud je uvedena tak stejne musi byt ihned na zacatku souboru, jinak soubor zacina volitelnym prazdnym mistem (ovsem pouze ascii, tj. U+0009, U+000a, U+000d nebo U+0020) za nimz nasleduje '<', ktere uvozuje komentar, procesni instrukci ci korenovy element (1, 22, 23, 24, 27 + definice zminenych prvku, ktera neni tak zajimava).

Dusledek tedy je, ze prazdne radky vadi pouze tehdy, jsou-li nasledovany XML deklaraci. Zato 0xef 0xbb 0xbf coz je utf-8 pro U+FEFF vadi vzdy, protoze ten znak sice je vicemene mezera, nicmene nikoli z pohledu XML, kde je povazovan za textova data, ktera se pochopitelne mimo element vyskytovat nesmi.

Re: XML v PHP 12.9.2008 07:43
Aleš Hakl

Jeste je mozna potreba zduraznit, ze pokud U+FEFF na zacatku je, tak pokud to zobrazite jako text, pravdepodobne tam stejne nic neuvidite, maximalne se na zacatku prvniho radku bude kurzor chovat "zvlastne", ale pravdepodobne ani to ne. Je potreba se do souboru podivat necim, co unicode nerozumi (idealne treba hexdump -C soubor.php | head).


KOMENTARZE
XML v PHP 9.9.2008 21:26 Gaudentius
  |- Re: XML v PHP 10.9.2008 00:13 Aleš Hakl
  L Re: XML v PHP 10.9.2008 17:39 Roman
    L Re: XML v PHP 11.9.2008 00:02 Aleš Hakl
      L Re: XML v PHP 11.9.2008 18:32 Roman
        L Re: XML v PHP 11.9.2008 18:48 Aleš Hakl
          L Re: XML v PHP 11.9.2008 19:40 Roman
            L Re: XML v PHP 11.9.2008 20:13 Aleš Hakl
              L Re: XML v PHP 12.9.2008 07:43 Aleš Hakl
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
> Szukanie oprogramowania
1. Pacman linux
Download: 4878x
2. FreeBSD
Download: 9066x
3. PCLinuxOS-2010
Download: 8564x
4. alcolix
Download: 10947x
5. Onebase Linux
Download: 9661x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6243x

1. xinetd
Download: 2413x
2. RDGS
Download: 937x
3. spkg
Download: 4760x
4. LinPacker
Download: 9966x
5. VFU File Manager
Download: 3198x
6. LeftHand Mała Księgowość
Download: 7203x
7. MISU pyFotoResize
Download: 2808x
8. Lefthand CRM
Download: 3563x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 3120x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz