Autor | Zpráva | ||
---|---|---|---|
h4ever Profil * |
#1 · Zasláno: 1. 5. 2013, 15:23:23
Zdravím,
hledám způsob jak převést data v tomto souboru: http://pastebin.com/16Upx1kU potřebuji z nich vytáhnout pouze některé informace a ty bych chtěl uložit v jednoduchém formátu to txt souboru (nebo souborů). Například vezmu-li to odzadu: unitgroups->group obsahují atributy name a units. Ty bych chtěl uložit do txt např. takto: Archers,54,97,245,246,315,316,317,318,319,320,321,322,328,360,363,364,367,372,375,378,381,385,466,470,471,475,476,477,478,485,503,504,505,507,509,510,511,512,514,516,517,518,519,521,522,523,524,525,537,538,540,541,627,628,746,747,786,787 na dalším řádku hodnoty z dalšího tagu Hlavně teda potřebuji poradit jak načíst ty data. U tagu resources by byl zase lepší formát: Food,0 Wood,1 Stone,1 atd. tag protounit podobně jako resources, ale zde bych chtěl seznamy nejen vytáhnout, ale taky roztřídit podle unitgroups. Mít možnost to nějak vy filtrovat a vygenerovat si více seznamů. Některé položky totiž taky obsahují navíc písmena odzadu jako např. zde: # <protounit id="849" name="William The Conqueror" /> # <protounit id="850" name="William The Conqueror, D" /> Tak jestli mi někdo helpne s tím XML budu rád. |
||
juriad Profil |
#2 · Zasláno: 1. 5. 2013, 15:31:18
Použij simplexml. Prohledej zdejší diskusi, najdeš hodně příkladů a ukázek.
|
||
h4ever Profil * |
#3 · Zasláno: 1. 5. 2013, 16:09:44
Aha, tak už tomu začínám přicházet na kloub.
<?PHP $contents = @file_get_contents("data_aok.xml"); $xml = @simplexml_load_string($contents); foreach($xml->unitgroups->group as $key=>$Obj) print_r($Obj); ?> Dostávám: SimpleXMLElement Object ( [@attributes] => Array ( [name] => Archers [units] => 4,5,24,39,474,492 ) ) Ten attributes ale spřístupnit nejde k těm vlastnostem name a units se dostanu jak? |
||
Kcko Profil |
#4 · Zasláno: 1. 5. 2013, 16:22:45
$Obj->name, $Obj->units |
||
h4ever Profil * |
#5 · Zasláno: 1. 5. 2013, 16:28:09 · Upravil/a: h4ever
Kcko:
To jsem zkoušel ale dostávám: SimpleXMLElement Object ( ) aha print_r($Obj["units"]); vrací [0] => 4,5,24,39,474,492 takže atributy jsou pole, nikoliv objekty Ještě k tomu poslednímu se nemůžu dostat. Mám $Obj["units"] a $Obj["units"][0] nevrací nic |
||
Kajman Profil |
units je v tom xml obyčejný string. Pokud si z něho chcete udělat pole, použijte např.
explode(',',(string)$Obj["units"]) |
||
h4ever Profil * |
#7 · Zasláno: 1. 5. 2013, 16:50:22 · Upravil/a: h4ever
Už jsem na to přišel. Díky
<?PHP $contents = @file_get_contents("data_aok.xml"); $xml = @simplexml_load_string($contents); foreach($xml->unitgroups->group as $key=>$Obj) { echo (string) $Obj["name"]; echo ","; echo (string) $Obj["units"]; echo "\n"; } ?> Není mi ale jasný jak z protounits dostat id: <?PHP $contents = @file_get_contents("data_aok.xml"); $xml = @simplexml_load_string($contents); foreach($xml->civ->protounit as $key=>$Obj) { print_r( $Obj->id); print_r( $Obj->name); } ?> daří se mi vráti akorád name beru zpět. Už to mám. Takže mám tento kód: <?PHP $contents = @file_get_contents("data_aok.xml"); $xml = @simplexml_load_string($contents); foreach($xml->civ->protounit as $key=>$Obj) { $arr[]=array( (string) $Obj["id"], (string) $Obj["name"]); } print_r($arr); ?> Vrací: Array ( [0] => Array ( [0] => 0 [1] => Academy, Disabled ) [1] => Array ( [0] => 1 [1] => Gator, disabled ) [2] => Array ( [0] => 3 [1] => Archer, D ) [3] => Array ( [0] => 4 [1] => Archer ) [4] => Array ( [0] => 5 [1] => Hand Cannoneer ) ... Potřeboval bych poradit jak uspořádat toto pole podle name. Tak i to jsem zvládl <?PHP $contents = @file_get_contents("data_aok.xml"); $xml = @simplexml_load_string($contents); foreach($xml->civ->protounit as $key=>$Obj) { $arr[]=array( (string) $Obj["id"], (string) $Obj["name"]); } foreach ($arr as $key => $obj) { $id[$key] = $key; //echo $key; $name[$key] = $obj['1']; } array_multisort($name, SORT_ASC, $id, SORT_ASC, $arr); print_r($arr); ?> |
||
Časová prodleva: 12 let
|
0