ugrás a tartalomhoz

XML mentése

ac230v · 2010. Jan. 27. (Sze), 14.59
Sziasztok!

Van egy olyan problémám, hogy előállítok egy XML oldalt, amit szeretnék fájlba íratni. A folyamat a következő: felhasználó elindít egy oldalt, utána megnyom egy gombot, ami meghív egy másik oldalt, ami már egy az adatbázisból előállított xml-t ad vissza. A visszaadott xml-t pedig szeretném, ha a felhasználó a gépére le tudná menteni.
De jelenleg sajnos ez csak úgy lehetséges, ha a megnyíló XML oldalon Fájl->Mentés másként.. (*.xml) választja a felhasználó.
Az lenne a jó, ha az xml tartalom rögtön Megnyitás/Mentés/Mégse kérdést váltana ki.

A válasz xml (excel-be tölthető):
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
.
.
</Worksheet>
</Workbook>

próbálkoztam azzal, hogy a választ betöltöm egy JavaScript objektumba (részlet):

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("http://domain.hu/sema.csomag.eljaras?p_1=1");
xmlDoc.save("c:\teszt.xml"); //na ez nem működik

ekkor "Engedély megtagadva" hibát kapok a JS futása során (ilyen hibára nem találtam semmilyen leírást).

A kérdés: lehetséges ezt így (vagy hasonlóan) megoldani, vagy marad a "Mentés másként.." ??
Leginkább JavaScript megoldás érdekelne, ha létezik.
(Adatbázis: Oracle10g, web kiszolgáló: Oracle10g PSP azaz PL/SQL Server Pages)
 
1

Content-Type

bonga · 2010. Jan. 27. (Sze), 16.23
Annak nézz már utána, hogy milyen Content-Type -ot ad vissza a szerver, amikor visszaadod az xml tartalmat. Azt gondolom, hogy az nem "application/vnd.ms-excel", vagy "application/ms-excel" és ezért kapod csak a mentés másként lehetőséget. Próbáld meg elérni, hogy xml adatok küldésekor ezen Content-Type-ok egyikét adja vissza header-ként a szerver a böngészőnek és akkor lesz megnyitási lehetőséged szvsz.

.bonga
2

Content-disposition

BlackY · 2010. Jan. 27. (Sze), 18.00
Szerintem a kérdés arra vonatkozott, hogy el lehetne-e kerülni, hogy a böngésző megpróbálja megjeleníteni az oldalt.
Az lenne a jó, ha az xml tartalom rögtön Megnyitás/Mentés/Mégse kérdést váltana ki.


A válasz:
Content-Disposition: attachment; filename=akarmi.xml

HTTP-fejléc kiküldése.
És persze ha még a bonga által említett Content-Type-ot is rendesen beállítod, akkor a megnyitásnál a megfelelő alkalmazást fogja elindítani.

BlackY
3

A Content-Type "text/html".

ac230v · 2010. Jan. 27. (Sze), 20.15
A Content-Type "text/html". Erre én is gondoltam, de még nem találtam megoldást a megváltoztatására.
Kb. ugyanez a helyzet a Content-disposition -nal is.
Jelenleg valami normális leírást keresek a HTP package-hoz, mert eddig csak a htp.print(''); -et használtam, de valószínű, hogy lesz itt más is.

A htp csomaggal kapcsolatban valami építő ötlet? :)

Köszönöm az eddigi ötleteket is, megerősített benne, hogy merre keresgéljek. (Még jöhetnek...)
4

A megoldás

ac230v · 2010. Jan. 28. (Cs), 09.09
Sziasztok!

Megtaláltam a megoldást (az ötletek sokat segítettek).
Mindenki okulására:
owa_util.mime_header('text/xml',false);
htp.p('Content-Disposition: attachment; filename="valami.xml"');
owa_util.http_header_close;
A megoldás eredménye, hogy a gombra kattintás után rögtön feljön egy IE ablak a Megnyitás/Mentés/Mégse kérdéssel, és bármelyik választása után automatikusan zárja az ablakot.

Köszönöm a hozzászolásokat!