Avatar billede nc85 Nybegynder
29. juni 2005 - 08:36 Der er 37 kommentarer og
1 løsning

xml error i php?

Hey alle...

Har en parser til et xml dokument! Når jeg kører filen lokalt viser den det uden fejl, og skriver xml'en korrekt om til mit html!

Når jeg så smider det op på en Server får jeg fejlen:
XML error: mismatched tag at line 4 

-------------------------------------

Koden:

    <?php
        echo "<table width=572 cellpadding=0 cellspacing=4 border=0><tr>";
        echo "<td width=120><strong>Navne:</strong></td><td width=44><strong>Valuta</strong></td><td width=36><strong>Pr:</strong></td><td width=104><strong>FOREX køber rejsecheck</strong></td>";
        echo "<td width=85><strong>FOREX køber sedler</strong></td><td width=86><strong>FOREX sælger sedler</strong></td>";
        echo "<td width=105><strong>FOREX sælger rejsecheck</strong></td>
        <td width=151><strong>Valutaguide 100DKK i udenlandsk valuta</strong></td>
        <td></td></tr>";

$xmlFile = "http://www.forexvaluta.dk/ratesxml.asp?id=219";
class RSSParser
{

    var $insideitem = false;
    var $tag = "";
    var $swift_code = "";
    var $swift_name = "";
    var $multiply = "";
    var $buy_cash = "";
    var $buy_tc = "";
    var $sell_cash = "";
    var $sell_tc = "";
    var $CurrencyGuide = "";
    var $base_swift = "";

    function startElement($parser, $tagName, $attrs)
    {
        if ($this->insideitem)
        {
            $this->tag = $tagName;
        }
        elseif ($tagName == "ROW")
        {
            $this->insideitem = true;
        }
    }
   
    function unhtmlspecialchars( $string )
    {
        $string = str_replace ( '&amp;', '&', $string );
        $string = str_replace ( '&#039;', '\'', $string );
        $string = str_replace ( '&quot;', '\"', $string );
        $string = str_replace ( '&lt;', '<', $string );
        $string = str_replace ( '&gt;', '>', $string );
     
        return $string;
    }

    function endElement($parser, $tagName)
    {
        if ($tagName == "ROW")

        {
           
          echo "
            <tr><td width='120'>" . utf8_decode(trim($this->swift_name)) . "</td>";
            echo "<td width='44'>" . trim($this->swift_code) . "</td>";
            echo "<td width='36'>" . trim($this->multiply) . "</td>";
            echo "<td width='104'>" . utf8_decode(trim($this->buy_cash)) . "</td>";
            echo "<td width='85'>" . utf8_decode(trim($this->buy_tc)) . "</td>";
            echo "<td width='86'>" . utf8_decode(trim($this->sell_cash)) . "</td>";
            echo "<td width='105'>" . utf8_decode(trim($this->sell_tc)) . "</td>";
            echo "<td width='151'>" . utf8_decode(trim($this->CurrencyGuide)) . "</td>
            <td></td></tr>";
          # echo "<td>" . trim($this->base_swift) . "</td></tr></table>";
          # echo "<td>" . trim($this->insideitem) . "</td></tr></table>";
            //Osv....
         
            $this->swift_code = "";
            $this->swift_name = "";
            $this->multiply = "";
            $this->buy_cash = "";
            $this->buy_tc = "";
            $this->sell_cash = "";
            $this->sell_tc = "";
            $this->CurrencyGuide = "";
            $this->base_swift = "";
            $this->insideitem = false;
        }
    }

    function characterData($parser, $data)
    {
        if ($this->insideitem)
        {
            switch ($this->tag)
            {
                case "SWIFT_CODE":
                    $this->swift_code .= $data;
                    break;
                case "SWIFT_NAME":
                    $this->swift_name .= $data;
                    break;
                case "MULTIPLY":
                    $this->multiply .= $data;
                    break;
                case "BUY_CASH":
                    $this->buy_cash .= $data;
                    break;
                case "BUY_TC":
                    $this->buy_tc .= $data;
                    break;
                case "SELL_CASH":
                    $this->sell_cash .= $data;
                    break;
                case "SELL_TC":
                    $this->sell_tc .= $data;
                    break;
                case "CURRENCYGUIDE":
                    $this->CurrencyGuide .= $data;
                    break;
                case "BASE_SWIFT":
                    $this->base_swift .= $data;
                    break;
            }
        }
    }
}

$xml_parser = xml_parser_create();
$rss_parser = new RSSParser();
xml_set_object($xml_parser,$rss_parser);
#ini_set('allow_call_time_pass_reference','1');
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen($xmlFile,"r") or die("Error reading XML data.");
while ($data = fread($fp, 4096))
{
    xml_parse($xml_parser, $data, feof($fp))
        or die(sprintf("XML error: %s at line %d",
        xml_error_string(xml_get_error_code($xml_parser)),
        xml_get_current_line_number($xml_parser)));
}
fclose($fp);
xml_parser_free($xml_parser);
echo "</table>";
?>
Avatar billede fynbo Nybegynder
29. juni 2005 - 13:06 #1
jeg oplevede noget lignende, da jeg uploade fra mac til unix-server. der var et unix-linjeskift i min fil, men det kunne ikke ses på mac'en.

er du sikker på at det er samme version af xml-parseren der findes på serveren og din maskine?
Avatar billede nc85 Nybegynder
29. juni 2005 - 13:08 #2
Altså mener du om det er den samme jeg har på min comp og den jeg har lagt på serveren, for så er svaret ja...

Eller mener du noget helt andet ?
Avatar billede fynbo Nybegynder
29. juni 2005 - 13:17 #3
kan du udskrive indholdet af xml filen på serveren og evt. se om den udskriver det samme som hvis du udskrev indholdet af xml filen lokalt?
Avatar billede nc85 Nybegynder
29. juni 2005 - 13:25 #4
Der er det så at XML filen lægger på en helt anden server en der hvor sitet ligger...

Men som sagt, hvis jeg kører mit parser script virker det fint lokalt, men ikke på der hvor websitet lægger...
Avatar billede fynbo Nybegynder
29. juni 2005 - 13:35 #5
Jeg er klar over at filen ligger på en ekstern server. Hvis du udskriver indholdet af xml filen, linje for linje, med et lille script, er det så samme indhold som udskrives på henholdsvis server og localhost?
Avatar billede nc85 Nybegynder
29. juni 2005 - 13:39 #6
Nåå, ja, det er det...

Virker bare mega underligt...
Avatar billede fynbo Nybegynder
29. juni 2005 - 13:45 #7
okay, hvis du er sikker på det er samme indhold den skriver ud og samme version af alle filerne, så kan jeg ikke hjælpe dig mere.
Avatar billede claus_joergensen Nybegynder
29. juni 2005 - 13:46 #8
Istedet for at komme med en hel masse php, så smid dit XML output herind, fejlen betyder at du har lavet et xml fejl, f.eks. er <xml>hej</ml> ikke valid kode, og vil retunere samme fejl som du har fået.
Avatar billede fynbo Nybegynder
29. juni 2005 - 13:50 #9
jeg tror han har smidt alle fejlmeddelser ind:
.. die(sprintf("XML error: %s at line %d",
        xml_error_string(xml_get_error_code($xml_parser)),
        xml_get_current_line_number($xml_parser))); ..
=
XML error: mismatched tag at line 4
Avatar billede nc85 Nybegynder
29. juni 2005 - 13:51 #10
Jamen hvordan kan det være jeg kan se den lokalt på min egen server?

Men here you go:
XML KODEN:

  <?xml version="1.0" encoding="iso-8859-1" ?>
- <web_dis_rates>
  <timestamp Desc="Senest opdateret:">2005-06-28 15:00</timestamp>
- <row>
  <swift_code>AED</swift_code>
  <swift_name>Arabiske Dirham</swift_name>
  <multiply>1</multiply>
  <buy_cash>1,6451</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>1,7829</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="AED" Amount="100">56,09</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>AUD</swift_code>
  <swift_name>Australske Dollar</swift_name>
  <multiply>1</multiply>
  <buy_cash>4,5402</buy_cash>
  <buy_tc>4,4948</buy_tc>
  <sell_cash>4,8553</sell_cash>
  <sell_tc>4,8553</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="AUD" Amount="100">20,60</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>BBD</swift_code>
  <swift_name>Barbados Dollar</swift_name>
  <multiply>1</multiply>
  <buy_cash>3,046</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>3,3109</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="BBD" Amount="100">30,20</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>BGN</swift_code>
  <swift_name>bulgariske lev (New)</swift_name>
  <multiply>1</multiply>
  <buy_cash>3,7099</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>3,9425</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="BGN" Amount="100">25,36</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>BRL</swift_code>
  <swift_name>Brasilianske Real</swift_name>
  <multiply>1</multiply>
  <buy_cash>2,5812</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>2,7806</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="BRL" Amount="100">35,96</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>BSD</swift_code>
  <swift_name>Bahamas Dollar</swift_name>
  <multiply>1</multiply>
  <buy_cash>6,1235</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>6,4998</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="BSD" Amount="100">15,39</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>CAD</swift_code>
  <swift_name>Canadiske Dollar</swift_name>
  <multiply>1</multiply>
  <buy_cash>4,873</buy_cash>
  <buy_tc>4,8243</buy_tc>
  <sell_cash>5,1295</sell_cash>
  <sell_tc>5,1295</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="CAD" Amount="100">19,50</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>CHF</swift_code>
  <swift_name>Schweiziske Francs</swift_name>
  <multiply>1</multiply>
  <buy_cash>4,7535</buy_cash>
  <buy_tc>4,706</buy_tc>
  <sell_cash>4,9005</sell_cash>
  <sell_tc>4,9005</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="CHF" Amount="100">20,41</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>CLP</swift_code>
  <swift_name>Chilenske Peso</swift_name>
  <multiply>1</multiply>
  <buy_cash>0,0093</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>0,0113</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="CLP" Amount="100">8 849,56</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>CNY</swift_code>
  <swift_name>Kinesiske Yuan</swift_name>
  <multiply>1</multiply>
  <buy_cash>0,6998</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>0,7765</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="CNY" Amount="100">128,78</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>CYP</swift_code>
  <swift_name>cypriotiske pund</swift_name>
  <multiply>1</multiply>
  <buy_cash>12,5002</buy_cash>
  <buy_tc>12,3752</buy_tc>
  <sell_cash>13,3478</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="CYP" Amount="100">7,49</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>CZK</swift_code>
  <swift_name>Tjekkiske Koruna</swift_name>
  <multiply>1</multiply>
  <buy_cash>0,2403</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>0,255</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="CZK" Amount="100">392,16</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
- <row>
  <swift_code>DOP</swift_code>
  <swift_name>Dominikanske Peso Oro</swift_name>
  <multiply>1</multiply>
  <buy_cash>0,1933</buy_cash>
  <buy_tc>-</buy_tc>
  <sell_cash>0,2329</sell_cash>
  <sell_tc>-</sell_tc>
  <CurrencyGuide BaseSwift="DKK" Swift="DOP" Amount="100">429,37</CurrencyGuide>
  <base_swift>DKK</base_swift>
  </row>
  <copyright>Copyright FOREX 2005</copyright>
  </web_dis_rates>
Avatar billede claus_joergensen Nybegynder
29. juni 2005 - 13:54 #11
Den XML er valid, så det kan ikke være den som laver fejlen.

Jeg tror at PHP outputter en fejl, og smider fejlen med i XML dokumentet, har du en link til den online udgave ?
Avatar billede fynbo Nybegynder
29. juni 2005 - 14:13 #12
det var også mit bud. men han siger at han kan læse filen fra serveren. ville gerne vide om

$xmlFile = "http://www.forexvaluta.dk/ratesxml.asp?id=219";
$handle = fopen($xmlFile, "r");
while (!feof($handle)) {
  $buffer = fgets($handle, 4096);
  echo $buffer;
}
fclose($handle);

udskrev præcis samme indhold på server og på localhost.

kan du parse en simpel xml fil på serveren?
Avatar billede nc85 Nybegynder
29. juni 2005 - 14:18 #13
Avatar billede claus_joergensen Nybegynder
29. juni 2005 - 16:12 #14
(griner)

http://www.forexvaluta.dk/ratesxml.asp?id=219 er jo ikke XML format mere... så er der jo klart den fejler :)
Avatar billede nc85 Nybegynder
29. juni 2005 - 16:19 #15
?? - hvad mener du?
Avatar billede claus_joergensen Nybegynder
29. juni 2005 - 16:21 #16
<html>
<link rel="stylesheet" href="css/forexvisuals.css" type="text/css">
<div id="FOREXLogo"><a href="http://www.forexvaluta.dk/"><img src="ARCHIVE/system/forex_logo.gif" width="200" height="70" border="0"></a></div>   
<div class="Title">Access denied for your IP (212.209.194.26) or your account has been disabled</div>
</html>

liger altså ikke et XML dokument :)
Avatar billede fynbo Nybegynder
29. juni 2005 - 16:24 #17
jeg får samme.

men jeg bad ham om at undersøge det og han sagde at hvis han hentede indholdet af http://www.forexvaluta.dk/ratesxml.asp?id=219, så spyttede den præcis det samme ud på server og på localhost. Det har den åbenbart ikke gjort, kan vi så se.
Avatar billede nc85 Nybegynder
29. juni 2005 - 20:30 #18
Jo, gør den så snart jeg kommer fra min IP - der er ikke andre end mig der kan få lov til at se XML filen - men det har jo ikke noget at gøre mht til fejlen! For henter jo det ind i min php fil, og derefter formatere det ud til HTML
Avatar billede fynbo Nybegynder
29. juni 2005 - 20:34 #19
har serveren samme ip som dig? givetvis ikke?
Avatar billede nc85 Nybegynder
29. juni 2005 - 20:43 #20
Hmm, nej - men har også sat server ip til at have adgang til XML filen - Så derfor burde det jo virke
Avatar billede fynbo Nybegynder
29. juni 2005 - 20:52 #21
jeg ved godt at det er irriterende spørgsmål, men hvis du forsøger at printe indholdet af filen ud på serveren, hvad siger den så? jeg spørger, fordi jeg tvivler på at den kan hente xml filen og det kan man se, hvis du prøver overstående kode jeg kom med.
Avatar billede claus_joergensen Nybegynder
29. juni 2005 - 20:55 #22
undskyld mig, men er det bare valuta kurser du vil have ?

Hvorfor bruger du så ikke nationalbankens xml doc, som er public for alle

http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml
Avatar billede nc85 Nybegynder
29. juni 2005 - 21:00 #23
Så siger den: XML error: mismatched tag at line 4
-----------------------------------------------
Men hvis jeg kører den på min egen lokale server får jeg ingen fejl, og filen vises korrekt!

-----------------
Grunden til jeg ikke bruger national banken er at der er noget forretningsaftale involveret i dette - Har derfor en aftale med Forex om at anvende deres
Avatar billede claus_joergensen Nybegynder
29. juni 2005 - 21:02 #24
<?php
header("Content-type: application/xml");
$xml = file_get_contents("http://www.forexvaluta.dk/ratesxml.asp?id=219");
echo $xml;
?>

Prøv at kør det script på din server (og giv os et link hvis muligt)
Avatar billede fynbo Nybegynder
29. juni 2005 - 21:03 #25
<?
$xmlFile = "http://www.forexvaluta.dk/ratesxml.asp?id=219";
$handle = fopen($xmlFile, "r");
while (!feof($handle)) {
  $buffer = fgets($handle, 4096);
  echo $buffer;
}
fclose($handle);
?>

prøv at køre overstående script på serveren og send linket til os
Avatar billede claus_joergensen Nybegynder
29. juni 2005 - 21:06 #26
nåå ja, URLS virker ikke altid i file_get_contents ;)
Avatar billede fynbo Nybegynder
29. juni 2005 - 21:10 #27
jeg har sagt det 1000 gange snart, at han skal gøre sådan, det var rart der kom en med samme idé. Utroligt nok samtidig.
Avatar billede nc85 Nybegynder
30. juni 2005 - 08:19 #28
Hmm, ok,lidt underligt... Når jeg går ind på http://www.forexvaluta.dk/ratesxml.asp?id=219
virker det fint, jeg får xml koden at se!
---------------------------------------------
Men når det er jeg kører det script i lige har lagt, siger den jeg ikke har adgang?
Avatar billede nc85 Nybegynder
30. juni 2005 - 08:21 #29
Hov, nej, hvis jeg bruger claus_joergensens script der, så får jeg denne fejl:

XML tolkningsfejl: forkert mærke. Forventede: </img>. Adresse: http://www.rejser-fly.dk/xml.php Linjenummer 5, Kolonne 136:<div id="FOREXLogo"><a href="http://www.forexvaluta.dk/"><img src="ARCHIVE/system/forex_logo.gif" width="200" height="70" border="0"></a></div>   
---------------------------------------------------------------------------------------------------------------------------------------^
Avatar billede nc85 Nybegynder
30. juni 2005 - 08:47 #30
JEg har fundet dette fra en google search, men der står ingen løsning på problemet!

http://www.wdvl.com/Authoring/Languages/PHP/Pro/prophp4_5.html
Avatar billede fynbo Nybegynder
30. juni 2005 - 08:57 #31
problemet er løst.

ved at gå ind på siden http://www.forexvaluta.dk/ratesxml.asp?id=219 får man bl.a. følgende kode:
<div id="FOREXLogo"><a href="http://www.forexvaluta.dk/"><img src="ARCHIVE/system/forex_logo.gif" width="200" height="70" border="0"></a></div>

Det vil altså sige at serveren ikke får adgang og derfor ikke kan parse filen. Hvis du havde undersøgt det fra starten, da jeg skrev det første gang kl. 13.27 igår, så havde problemet været løst der ;)
Avatar billede fynbo Nybegynder
30. juni 2005 - 08:58 #32
du skal undersøge om du har sat serverens ip rigtigt op, hvis du har det, så vil dit script også virke.
Avatar billede nc85 Nybegynder
30. juni 2005 - 09:05 #33
Ok... Hør nu! Serverens IP er følgende: 80.198.127.54

Og denne IP har adgang til selve filen! Og det er 100% Sikkert da jeg modtog en mail fra webmasteren fra Forex igår, og skrev han skulle ændre det til at også denne IP havde adgang!
Avatar billede nc85 Nybegynder
30. juni 2005 - 09:08 #34
Hov, hold kæft jeg er en nød!

Læste lige mailen igen, og den fil hvor serveren har adgang er http://www.forexvaluta.dk/ratesxml.asp?id=220

---------------------------

Klart det ikke virkede så jo!
Avatar billede nc85 Nybegynder
30. juni 2005 - 09:11 #35
Og derfor virker det nu! Laaangt om længe! :)

Jeg vil sige kanon mange tak for jeres tid, og undskyld jeg lige har været en nød til at læse mine mails :)
Avatar billede fynbo Nybegynder
30. juni 2005 - 09:16 #36
Det er okay! Det er jo bare dejligt at det virker nu... Rigtig god sommer! :)
Avatar billede nc85 Nybegynder
30. juni 2005 - 11:37 #37
Jo tak, og i ligemåde :)
Avatar billede jakobdo Ekspert
01. juli 2005 - 08:27 #38
Claus: Du skriver: nåå ja, URLS virker ikke altid i file_get_contents ;)
http://dk2.php.net/file_get_contents
Tip: You can use a URL as a filename with this function if the fopen wrappers have been enabled.
Så det er ikke helt korrekt.
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