Autor Zpráva
h4ever
Profil *
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" />
A tzn. vytvořit seznamy kde ty písmena nejsou vůbec, nebo kde jsou pouze písmena D, Kde jsou pouze písmena A, atd

Tak jestli mi někdo helpne s tím XML budu rád.
juriad
Profil
Použij simplexml. Prohledej zdejší diskusi, najdeš hodně příkladů a ukázek.
h4ever
Profil *
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
        )

)
(zkráceno)
Ten attributes ale spřístupnit nejde k těm vlastnostem name a units se dostanu jak?
Kcko
Profil
$Obj->name, $Obj->units
h4ever
Profil *
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 *
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);
  
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: