webForumDet fria alternativet

Läsa XML med php

10 svar · 1 001 visningar · startad av Guldstrand

GuldstrandMedlem sedan juli 20041 271 inlägg
#1

Jag har följande i ett XML dokument:

<?xml version='1.0' standalone='yes' ?>
<news>
<item>
<title>titel 1 här</title>
<published>2009-02-12</published>
</item>

<item>
<title>titel 2 här</title>
<published>2009-02-24</published>
</item>
</news>

Hur gör jag för att spara <title> i en variabel och <published> i en annan?

Just nu har jag detta:

$file = "http://www.mindoman.com/latestnews.xml"; 
 
function startTag($parser, $data){ } 
function endTag($parser, $data){ } 
$xml_parser = xml_parser_create(); 
xml_set_element_handler($xml_parser, "startTag", "endTag"); 
xml_set_character_data_handler($xml_parser, "contents"); 
$fp = fopen($file, "r"); 
$data = fread($fp, 80000); 
if(!(xml_parse($xml_parser, $data, feof($fp)))){ 
    die("Error on line " . xml_get_current_line_number($xml_parser)); 
} 
xml_parser_free($xml_parser); 
fclose($fp);
	$news = "<strong>$data</strong>";

..som bara visar datumen bredvid varandra, inget annat.

SPiNMedlem sedan mars 20007 896 inlägg
#2

SimpleXML är lättare att använda om du bara ska läsa:

<?php
$xml = simplexml_load_file("XMLFil.xml");
echo "<p>Första rubriken: " . $xml->item[0]->title . "</p>";
echo "<p>Publicerad: " . $xml->item[0]->published . "</p>";
GuldstrandMedlem sedan juli 20041 271 inlägg
#3

Testade att köra koden direkt, men fick en blank sida. :r

GuldstrandMedlem sedan juli 20041 271 inlägg
#4

Verkar inte som att jag kan öppna/parsa något externt xml-dokument alls. :(

Har detta:

<?php 

error_reporting(E_ALL);
ini_set("display_errors",true);

if (file_exists("http://fof.se/pod/rss.xml")) {
    $xml = simplexml_load_file("http://fof.se/pod/rss.xml");
 
    print_r($xml);
} else {
    exit('Failed to open the XML document.');
}

?>

Får bara "Failed to open the XML document." hela tiden.

(Ja, jag har tillgång till SimpleXML.)

TroxyMedlem sedan mars 20041 505 inlägg
#5

Om du hoppar över file_exists då?

TroxyMedlem sedan mars 20041 505 inlägg
#6

Otestad kod, men såhär borde man göra:

try {
  $xml = new SimpleXMLElement('http://fof.se/pod/rss.xml', NULL, TRUE);
} catch (Exception $e) {
  echo 'Ojsan, kan ej ladda xml: ',  $e->getMessage();
}
if (NULL !== $xml) {
  // gör något kul med xml-trädet
}
GuldstrandMedlem sedan juli 20041 271 inlägg
#7

Troxy skrev:

Otestad kod, men såhär borde man göra:

try {
  $xml = new SimpleXMLElement('http://fof.se/pod/rss.xml', NULL, TRUE);
} catch (Exception $e) {
  echo 'Ojsan, kan ej ladda xml: ',  $e->getMessage();
}
if (NULL !== $xml) {
  // gör något kul med xml-trädet
}

Då fick jag:

Fatal error: Cannot clone object of class SimpleXMLElement due to 'zend.ze1_compatibility_mode' in bla, bla, bla...

Vad betyder det? :r

SPiNMedlem sedan mars 20007 896 inlägg
#8
<?php
$pageContent = file_get_contents("XMLFil.xml");
$xml = new SimpleXMLElement($pageContent);

echo "<p>" . $xml->item[0]->title . "</p>";
...
GuldstrandMedlem sedan juli 20041 271 inlägg
#9

SPiN skrev:

<?php
$pageContent = file_get_contents("XMLFil.xml");
$xml = new SimpleXMLElement($pageContent);

echo "<p>" . $xml->item[0]->title . "</p>";
...

Det verkar fungera.
Vad är det för skillnad på "simplexml_load_file" och "file_get_contents"?
Vilket sätt är "snabbast"?

SPiNMedlem sedan mars 20007 896 inlägg
#10

Det är nog inte så stor hastighetsskillnad, men det är ju enklare att direkt läsa in information till XML-parsern. Det fungerade ju däremot inte.

GuldstrandMedlem sedan juli 20041 271 inlägg
#11

Ok! Bra att veta.

Just nu har jag detta:

ini_set('zend.ze1_compatibility_mode', 'false'); 

function news() {
$s = simplexml_load_file("http://www.mindoman.com/latestnews.xml"); 

print("<table cellpadding=\"0\" cellspacing=\"0\">");
foreach ($s->artikel as $artikel) {
    print("<tr><td>$artikel->titel</td>");
    print("<td class=\"action\">$artikel->datum</td></tr>");
}
print("</table>"); 
}

Men varje gång jag ska uppdatera sidan, så poppar det upp ett fönster ang. om jag vill spara ner php-filen. (Fungerar bara ibland.)
Hur löser jag det?

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)