webForumDet fria alternativet

xml

20 svar · 825 visningar · startad av Jet-li

Jet-liMedlem sedan juli 200421 inlägg
#1

Det är en xml fil på en annan domän än min som jag vill plocka ut viss information för att sedan visa på min domän.
Och den här.xml filen har den här uppbyggnaden:

<onliners>
<member>
<name>DartVader</name>
<category>pro</category>
</member>
</onliners>

Jag skulle vilja plocka ut namn slumpvis efter category och använda på min sida. Och jag vill kunna välja hur många som ska slumpas ut varje gång.
Men jag har noll koll på php och vet inte vart man kan läsa sig till detta. Har försökt googla men inte varit fyndig ännu.....

LivijnMedlem sedan mars 200630 inlägg
#2

det här är inte php

Jet-liMedlem sedan juli 200421 inlägg
#3

Livijn skrev:

det här är inte php

Vilken slutledningförmåga du besitter! Och då du verkar veta ännu mindre än vad jag gör så undrar jag vad du bidrar med ditt inlägg?!?

LivijnMedlem sedan mars 200630 inlägg
#4

att man ska flytta tråden, btw ja e bra på php :D *Stolt*

Jet-liMedlem sedan juli 200421 inlägg
#5

Livijn skrev:

att man ska flytta tråden, btw ja e bra på php :D *Stolt*

Om du är så bra så kanske du kan svara på frågan då istället för meningslöst dravel!

GunnarDMedlem sedan juni 20014 250 inlägg
#6

Man kan hantera XML filer i php, här är dokumentationen: http://se.php.net/manual/en/ref.xml.php

Har aldrig behövt göra det så jag kan inte ge mera hjälp ;)

emissionMedlem sedan dec. 19996 095 inlägg
#7

Du kan kanske använda funktionen xml_parse_into_struct, och sedan lösa slumpfrågan i php.

http://se.php.net/manual/en/function.xml-parse-into-struct.php

Jet-liMedlem sedan juli 200421 inlägg
#8

Att få ut en lista på allt är inga problem. Det som jag inte hittar lösningen på är hur man endast får ut 3 st slumpvalda members.

GunnarDMedlem sedan juni 20014 250 inlägg
#9

Kan du få in det i en array så borde det vara enkelt att slumpa ut 3 stycket värden ur arrayen.

plupMedlem sedan sep. 2005100 inlägg
#10

Det är i allra högsta grad en PHP-fråga!

Om du har en xml som ser ut typ:

<?xml version="1.0" encoding="ISO-8859-1"?>
<onliners>
  <member>
      <name>Adam</name>
      <category>pro</category>
  </member>
  <member>
      <name>Bertil</name>
      <category>pro</category>
  </member>
  <member>
      <name>Caesar</name>
      <category>pro</category>
  </member>
  <member>
      <name>David</name>
      <category>n00b</category>
  </member>
  <member>
      <name>Erik</name>
      <category>n00b</category>
  </member>
  <member>
      <name>Fredrik</name>
      <category>pro</category>
  </member>
  <member>
      <name>Gosta</name>
      <category>pro</category>
  </member>
  <member>
      <name>Hjalmar</name>
      <category>pro</category>
  </member>
</onliners>

Så kan du använda dig av följande funktion

<?php

function getName ($category = "pro", $num = 3) {

	// PHP5 - DOM - http://se2.php.net/manual/en/ref.dom.php
	$doc = DOMDocument::load('onliners.xml') or exit ("error");
	$xpath = new DOMXPath($doc);
	$params = $xpath->query("//member[category='" . $category . "']/name");

	// PHP4 - DOM XML - http://se2.php.net/manual/en/ref.domxml.php
//	$doc = domxml_open_mem('onliners.xml') or exit ("error");
//	$xpath = $doc->xpath_new_context (); 
//	$params = $xpath->xpath_eval("//member[category='" . $category . "']/name"); 

	foreach ($params as $param)
		$index[] = $param->nodeValue;

	$rand_keys = array_rand($index, $num);
	foreach ($rand_keys as $key)
		$arr[] = $index[$key];

	return $arr;

}

$data = getName (); // <- ANROPET!

print_r ($data); // <- GER / (eller slumpar fram i det här fallet då)...

?>

...utskriften:

Array ( [0] => Bertil [1] => Hjalmar [2] => Caesar )

Sen kan du ju göra vad du vill med $data, vart du nu vill ha den.
Hoppas det går bra.

Jag fullkomligt ÄLSKAR DOM i PHP, och XPATH!, det är så genialiskt! Fler människor borde använda det!

Jet-liMedlem sedan juli 200421 inlägg
#11

"Fatal error: Call to undefined function: load() in /var/www/html/test/random.php on line 6" dyker upp när jag testar....
Verkar inte gilla sökvägen till .xml filen

plupMedlem sedan sep. 2005100 inlägg
#12

njae, felmeddelandet klagar inte på sökvägen. däremot så kanske du kör med en lite äldre version av php? jag har testat ovanstående på "PHP Version 5.1.4" med framgång.

onliners.xml får du ju såklart byta ut mot den "riktiga" sökvägen.

/red
eller ja jo det är klart att sökvägen kan vara problemet, som sagt, "onliners.xml" måste ju vara "rätt"

Jet-liMedlem sedan juli 200421 inlägg
#13

Har läst på lite om DOM och förstått att man inte kan använda det om inte xml filen ligger på sin egen server. Har jag förstått det rätt eller har jag fel?

plupMedlem sedan sep. 2005100 inlägg
#14

jodå, det går att använda på externa filer, (det är fantastiskt!!!).

har gjort så i detta exempel, http://www.webforum.nu/showthread.php?t=137704

/red (om du berättar sökvägen/URLen till den "riktiga" onliners.xml så skulle jag kanske bättre förstå var felet ligger.)

Jet-liMedlem sedan juli 200421 inlägg
#15

hmm kollade upp vilken version som jag hade av PHP och det var 4.4.2

plupMedlem sedan sep. 2005100 inlägg
#16

åååååhhhh va synd, DOM är tyvärr php5 only.

/red
kanske att det funkar om du byter ut de två första raderna i funktionen till

$doc = domxml_open_mem('onliners.xml');
$xpath = $doc->xpath_new_context ();

så blir det DOM XML ist som funkar i php4.

(jag har INTE provat att testa detta, men det borde funka på samma sätt tycker jag.)

Jet-liMedlem sedan juli 200421 inlägg
#17

Visst är det synd men det kanske går att uppgradera till PHP 5 med lite tur.....

Fatal error: Call to undefined function: query() in /var/www/html/test/random.php on line 7
blir det som error nu?!?


 $params = $xpath->query("//member[category='" . $category . "']/name");

Så lite framsteg gjorde ändringen ändå :)

plupMedlem sedan sep. 2005100 inlägg
#18

ah, sorry, den raden är ju lite DOM specifik den med...
byt ut $xpath->query(...) mot $xpath->xpath_eval(...)
så kanske... :)

Jet-liMedlem sedan juli 200421 inlägg
#19

Den delen verkar ha gjort susen men nu blir det fel i rad 9....
"Warning: Invalid argument supplied for foreach() in /var/www/html/test/random.php on line 9"

foreach ($params as $param)
plupMedlem sedan sep. 2005100 inlägg
#20

hahaha, det tar aldrig slut :e :l

alltså, php5 DOM query returnerar en DOMNodeList och därför passar den bra att "foreach'a", se manualen för DOM xpath-query för exempel.

php4 DOM XML hanterar tydligen det returnerade värdet av en (motsvarande query) xpath_eval lite annorlunda, kolla manualen för exempel.

eller så kanske det är lättare att uppgradera till php5, (med tanke på att php6 redan kommit en bit i utvecklingsstadiet så vore det kanske värt att uppgradera om man vill hänga med i svängarna)

Genererad på 500 ms · cache AV · v20260730165559-full.f96bc7eb