Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: XML-tiedoston haku ja muunto HTML-koodiksi

JackT [14.09.2008 11:38:44]

#

Haen xml-tiedoston toiselta palvelimelta salasanan takaa. Tiedoston sisältö on tarkoitus lisätä valmiille sivulle (.php) sisällöksi.

Homma onnistuu kun haen tiedoston ihan copypasteamalla omalle palvelimelle omaksi tiedostokseen. Jotenkin tuo tiedoston haku ja sen muunto html-koodiksi ei onnistu yhdessä. Erikseen molemmat toimivat kyllä.

Mikä neuvoksi?

Tiedoston haku onnistuu tällä koodipätkällä:

<?php
// HTTP authentication
$url = "http://www.haettavaxml-tiedosto.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "tunnus:salasana");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

Ja xml-tiedoston näyttö sivussa tällä:

<head>
<script>
function loadXMLDoc(fname)
{
var xmlDoc;
// code for IE
if (window.ActiveXObject)
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation
&& document.implementation.createDocument)
  {
  xmlDoc=document.implementation.createDocument("","",null);
  }
else
  {
  alert('Your browser cannot handle this script');
  }
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}

function displayResult()
{
xml=loadXMLDoc("xml-tiedosto.xml");
xsl=loadXMLDoc("xml-tiedoston-tyyli.xsl");
// code for IE
if (window.ActiveXObject)
  {
  ex=xml.transformNode(xsl);
  document.getElementById("example").innerHTML=ex;
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation
&& document.implementation.createDocument)
  {
  xsltProcessor=new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);
  resultDocument = xsltProcessor.transformToFragment(xml,document);
  document.getElementById("example").appendChild(resultDocument);
  }
}
</script>
</head>
<body onload="displayResult()>
<div id="example">
</body>

ville-v [14.09.2008 12:32:38]

#

PHP-pätkäsi tulostaa tiedoston siihen kohtaan missä sitä kutsutaan, eikö?

JS-pätkällesi annetaan tiedostonimi, joten olettaisin että sekin hakee tiedoston omalla tahollaan. Jos haluat yhdistää nämä, korvaa rivi

"xml=loadXMLDoc("xml-tiedosto.xml");

, katso täältä mallia: http://www.w3schools.com/DOM/dom_loadxmldoc.asp , ja laita funktion sisään PHP-funktiosi joka luo jonkinlaisen tulostuksen mallia

xml = loadXMLString(<PHP-skripti tulosti tiedoston tähän.>);

Jos tuo pelkkä JS-versio toimisi tuollaisenaan, ei kai taida kuitenkaan olla mitään syytä käyttää PHP-versiota, senhän voi laittaa vaikka <noscript>:n sisään.

JackT [16.09.2008 19:55:56]

#

Kaikkein järkevin olisi tosiaan jos saisin kaikki hoidettua JS:llä. Asia kun on minulle uusi niin ehkä olen lähtenyt väärää reittiäkin.

Ensimmäinen ongelma oli tiedoston haku salasanan takaa. Tämän sain onnistumaan tuolla mainitsemallani curl-scriptilä php:lla. Toinen ongelma oli xml-tiedoston ymppäys html:ään, jossa avuksi tuli tuo JS:n LoadXMLDoc.

Tässä on nyt vikana sekin, että kokeilut olen tehnyt niin, että tallensin tuon haetun sivun ihan copypastella omalle palvelimelle. Jotta sain testattua tyylejä jouduin xml-tiedostoon lisäämään linkin käytettävään tyylitiedostoon.

Nyt kun yritän ympätä näitä kaikkia yhteen niin loppuu ymmärrys. Yritin ympätä tuota php:lla tiedoston hakua tuonne JS:n sisään, mutta tuloksena tulee aina tyhjä sivu. Olen lueskellut noita w3:n oppaita moneen suuntaan, mutta ei auta.

More help please!

Metabolix [16.09.2008 20:23:06]

#

Tee ensin itse sivu niin, että JS-systeemi toimii staattisen (omalla palvelimellasi olevan) XML-tiedoston kanssa. Tämä sinulla ilmeisesti onkin jo.

Tee sitten PHP-skripti, joka hakee halutun XML-tiedoston ja tulostaa sen. Tämäkin ilmeisesti toimii sinulla jo. Lisää koodiin vielä header-funktiolla oikea sisältötyyppi ennen XML-tiedoston tulostusta, esimerkiksi header("Content-Type: text/xml");

Yhdistä lopuksi nämä kaksi osaa niin, että korvaat JS-koodista tiedostonimen "oma.xml" nimellä "lataus.php". Kaiken pitäisi toimia aivan odotusten mukaan. Voit vielä tarkistaa käsin, mitä palvelin näissä tapauksissa ilmoittaa tiedoston tyypiksi.

JackT [17.09.2008 18:58:04]

#

Nyt toimii, iso kiitos!

Eipä kaukana ollut tuossa aiemmassakaan yrityksessä, mutta pielessä kuitenkin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta