26. juni 2006 - 16:51
Der er
23 kommentarer og 1 løsning
Hjælp til xml data
Er der en xml-haj da kan hjælpe mig med at få disse vadier ud: (date, number, dayname, text1, text2, icon) Jeg har prøvet at lege lidt med xml_parser_create() men kan ikke få det til at virke helt som jeg gerne vil.. <?php $file = "test.xml"; function startElement($parser, $name, $attrs) { } function endElement($parser, $name){ } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); if (!($fp = fopen($file, "r"))) { // error } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { // error } } xml_parser_free($xml_parser); ?> <!-- test.xml --> <?xml version="1.0"?> <mydata produced="2006-06-24 00:00:00"> <day date="2006-06-25" number="0" dayname="søndag"> <text1>Tekst 0 1</text1> <text2>Tekst 0 2</text2> <icons> <icon>icon_name_1</icon> </icons> </day> <day date="2006-06-26" number="1" dayname="mandag"> <text1>Tekst 1 1</text1> <text2>Tekst 1 2</text2> <icons> <icon>icon_name_2</icon> </icons> </day> <day date="2006-06-27" number="2" dayname="tirsdag"> <text1>Tekst 2 1</text1> <text2>Tekst 2 2</text2> <icons> <icon>icon_name_3</icon> </icons> </day> <day date="2006-06-28" number="3" dayname="onsdag"> <text1>Tekst 3 1</text1> <text2>Tekst 3 2</text2> <icons> <icon>icon_name_4</icon> </icons> </day> <day date="2006-06-29" number="4" dayname="torsdag"> <text1>Tekst 4 1</text1> <text2>Tekst 4 2</text2> <icons> <icon>icon_name_5</icon> </icons> </day> </mydata> <!-- test.xml -->
Annonceindlæg fra Deloitte
Jeg skal gerne gøre et forsøg senere, hvis ingen har meldt en løsning. Om jeg har XML-haj, langtfra, men noget slamkode som kan give dig den ønskede virkning, det skulle jeg nok kunne klare! :o)
Mit bud: $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); $file = "test.xml"; $fp = fopen($file, "r") or die("Kunne ikke åbne filen."); 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); // ----- function startElement($parser, $tagName, $attrs) { global $insideDay, $tag; if ($insideDay) { $tag = $tagName; } elseif ($tagName == "DAY") { echo "Date: " . $attrs["DATE"] . <br>; echo "Number: " . $attrs["NUMBER"] . <br>; echo "Dayname: " . $attrs["DAYNAME"] . <br>; $insideDay = true; } } function endElement($parser, $tagName) { global $insideDay, $tag; if ($tagName == "DAY") { $tag = ""; $insideDay = false; } } function characterData($parser, $data) { global $insideDay, $tag; if ($insideDay) { switch ($tag) { "TEXT1" : echo "Text1: " . $data . "<br>"; break; "TEXT2" : echo "Text2: " . $data . "<br>"; break; } } }
Hov, havde ikke lige set at jakobdo havde nået at melde sig på banen mens jeg sad og kodede. :^)
hmmm det virker næsten.. får bare text1 og text2 ud flere gange.. Date: 2006-06-25 Number: 0 Dayname: søndag Text1: Tekst 0 1 Text1: Text1: Text2: Tekst 0 2 Text2: Text2: Date: 2006-06-26 Number: 1 Dayname: mandag Text1: Tekst 1 1 Text1: Text1: Text2: Tekst 1 2 Text2: Text2: osv...
har fået det til at virke ved at gørre sådan.. function characterData($parser, $data) { global $insideDay, $tag; if (trim($data) > 0 && $insideDay) //---- if ($insideDay) { switch ($tag) { "TEXT1" : echo "Text1: " . $data . "<br>"; break; "TEXT2" : echo "Text2: " . $data . "<br>"; break; } } } men hvis jakobdo kan komme med en bedre måde at gøre det på.. så venter jeg da en dags tid ;)
når ja.. der var også lige ICONS/ICON hvor kommer de ud..?? <icons> <icon>icon_name_1</icon> </icons>
Hvis du på serveren har PHP5 installeret, så brug SimpleXML eller DOM funktionerne istedet.. SAX-parsere (som dem du bruger) er til at blive langhåret af... ;) -fangel
Jeg har PHP 4.3.4.4 på serveren..
Icon får du med med: function characterData($parser, $data) { global $insideDay, $tag; if (trim($data) != "" && $insideDay) //---- if ($insideDay) { switch ($tag) { "TEXT1" : echo "Text1: " . $data . "<br>"; break; "TEXT2" : echo "Text2: " . $data . "<br>"; break; "ICON" : echo "Icon: " . $data . "<br>"; break; } } }
26. juni 2006 - 21:38
#10
hæ hæ nielle det trode jeg også men den duer ikke.. da den er $insideDay er false kommer den aldrig derind.. :D men har fået den til at virke med... function startElement($parser, $tagName, $attrs) { global $tag; $tag = $tagName; if ($tag == "DAYFORECAST") { echo "Date: " . $attrs["DATE"] . "<br>\n"; echo "Number: " . $attrs["NUMBER"] . "<br>\n"; echo "Dayname: " . $attrs["DAYNAME"] . "<br>\n"; } } function endElement($parser, $tagName) { //-- Tom.. } function characterData($parser, $data) { global $tag; if (trim($data)) { if ($tag == "TEXT1") { echo "Text1: ".$data."<br>\n"; } elseif ($tag == "TEXT2") { echo "Text1: ".$data."<br>\n"; } elseif ($tag == "ICON") { echo "Icon: ".$data."<br>\n"; } } }
26. juni 2006 - 21:40
#11
$insideDay bør absolut ikke være false for icon.
26. juni 2006 - 21:43
#12
Hvor kommer "DAYFORECAST" ind i sammenhængen? Den optræder ikke i den XML-kode du har vist.
26. juni 2006 - 21:45
#13
Nielle: Jeg skrev bare jeg ville kigge på en løsning, så det skulle ikke opfattes som en reservation! :o) Du giver jo også kvalificeret hjælp, så kunne jeg jo netop bruge min tid på andre ting, som f.eks. at spille fodbold i det gode vejr!
26. juni 2006 - 21:46
#14
sorry det var mig der lavede lidt om på navnet.. "DAG"
26. juni 2006 - 21:48
#15
26/06-2006 21:45:06> Fair nok ;^)
26. juni 2006 - 21:49
#16
Jeg ville mene at dette skulle virke (inkl. icon): $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); $file = "test.xml"; $fp = fopen($file, "r") or die("Kunne ikke åbne filen."); 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); // ----- function startElement($parser, $tagName, $attrs) { global $insideDay, $tag; if ($insideDay) { $tag = $tagName; } elseif ($tagName == "DAY") { echo "Date: " . $attrs["DATE"] . <br>; echo "Number: " . $attrs["NUMBER"] . <br>; echo "Dayname: " . $attrs["DAYNAME"] . <br>; $insideDay = true; } } function endElement($parser, $tagName) { global $insideDay, $tag; if ($tagName == "DAY") { $tag = ""; $insideDay = false; } } function characterData($parser, $data) { global $insideDay, $tag; if ($insideDay && trim($data) != "") { switch ($tag) { "TEXT1" : echo "Text1: " . $data . "<br>"; break; "TEXT2" : echo "Text2: " . $data . "<br>"; break; "ICON" : echo "Icon: " . $data . "<br>"; break; } } }
26. juni 2006 - 21:58
#17
Ja nu virker det da også.. nå man ellers får rettet alle de sjove fejl du laver :D der mangler "case" ved TEXT1,TEXT2,ICON og så ved php ikke hvad . <br>; er (Date, Number, Dayname) :D
26. juni 2006 - 22:00
#18
dog kan jeg ikke lige se hvorfor du bruger $insideDay det kan jo laves uden.. nielle du må også godt smide et svar..
26. juni 2006 - 22:07
#19
$insideDay bruges for at sikre at der ikke vil komme matches på f.eks. ICOB som ligger unden for en day-tag: <day date="2006-06-29" number="4" dayname="torsdag"> ... </day> <icon>Den vil vi ikke have med</icon> Godt nok er der ikke sådan nogen i eksemplet, så det gåt godt denne gang. Ups, den med de manglende case havde jeg ikke lige opdaget... Og <br> uden "-tegn... Sorry! ... og et svar :^)
26. juni 2006 - 22:08
#20
Og trykfejl strøes også ud med rund hånd :^)
26. juni 2006 - 22:18
#21
Ha ha.. okææ.. så ved jeg også det :D mange tak for jeres hjælp :-)
26. juni 2006 - 22:24
#22
Det må være Nielle du mener! :o) Nielle er sgu en guttermand.
26. juni 2006 - 22:26
#23
Ahhhhhh, det er altid rart at få stivet sit ego af ;^)
26. juni 2006 - 22:38
#24
Jo det var Nielle da lavede koden + fik point.. men derfor kan man jo også godt takke de andre som har skrævet her.. ;)
Vi tilbyder markedets bedste kurser inden for webudvikling