Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AlessandrodeMatos

[Resolvido] Array com arquivo

Recommended Posts

Pessoal , antes de tudo boa noite.

Gostaria de fazer um array com as informações vindo de um arquivo xml.

Supondo que no arquivo XML eu tenha essas informações

<item id="39962" name="Concentration" cname="ITEM_PET2_PRO_70_F" desc="When the Fellow's HP falls below 70%, the Fellow's Magic Defense is increased." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_pro_around_c.png" stack="1" sexe="4" degree="1">
<attr v="-1" s="P2SKILL_PRO_70_F" /></item>

<item id="39979" name="Increase Strength" cname="ITEM_PET2_ENC_70_A" desc="Increases your Strength." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c_1.png" stack="1" sexe="5" degree="1">
<attr v="-1" s="P2SKILL_ENC_70_A" /></item>

<item id="39996" name="Increase Intelligence" cname="ITEM_PET2_ENC_70_B" desc="Increases your Intelligence." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c.png" stack="1" sexe="5" degree="1">
<attr v="-1" s="P2SKILL_ENC_70_B" /></item>

<item id="40013" name="Increase Vitality" cname="ITEM_PET2_ENC_70_C" desc="When your HP falls below 50%, your some of HP is recovered." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c_1.png" stack="1" sexe="5" degree="1">
<attr v="-1" s="P2SKILL_ENC_70_C" /></item>

<item id="40030" name="Recover" cname="ITEM_PET2_ENC_70_D" desc="When your MP falls below 50%, your some of MP is recovered." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c.png" stack="1" sexe="5" degree="1">
<attr v="-1" s="P2SKILL_ENC_70_D" /></item>

 

Como eu faria para resgatar somente o id,name,cname e pict? Pois são 36 mil linhas e jogar tudo no banco de dados ficaria extremamente cansativo e a cada atualização teria que atualizar o banco.

 

quais quer duvidas ou opniões postem porfavor , cada um contribui com oque pode :)

Agradeço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas formas.

 

Ou você converte esse XML para um array ( no manual e no Google tem diversos exemplos) ou você lê apenas os nós que quer e, para isso, a SimpleXML

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duas formas.

 

Ou você converte esse XML para um array ( no manual e no Google tem diversos exemplos) ou você lê apenas os nós que quer e, para isso, a SimpleXML

 

não entendi muito bem :S

 

teria como dar uma explicação

um amigo meu me passou essa parte

$file= "itens.xml";

$xml = simplexml_load_file($file);
$array = $xml->Message->attributes()->Id;

foreach($array as $value)
echo $value;

 

tentei porem não obtive sucesso :/

 

Warning: main() [function.main]: Node no longer exists in /home/alessand/public_html/rev6/teste2.php on line 13

Warning: main() [function.main]: Node no longer exists in /home/alessand/public_html/rev6/teste2.php on line 13

Warning: Invalid argument supplied for foreach() in /home/alessand/public_html/rev6/teste2.php on line 15

 

os erros obtidos foram os erros acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, trabalhando com a classe DOMDocument você tem muita flexibilidade para fazer o que você quiser com o xml.

 

Veja:

 

XML

 

 

<?php

$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<itens>
   <item id="39962" name="Concentration" cname="ITEM_PET2_PRO_70_F" desc="When the Fellow's HP falls below 70%, the Fellow's Magic Defense is increased." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_pro_around_c.png" stack="1" sexe="4" degree="1">
       <attr v="-1" s="P2SKILL_PRO_70_F" />
   </item>
   <item id="39979" name="Increase Strength" cname="ITEM_PET2_ENC_70_A" desc="Increases your Strength." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c_1.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_A" />
   </item>
   <item id="39996" name="Increase Intelligence" cname="ITEM_PET2_ENC_70_B" desc="Increases your Intelligence." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_B" />
   </item>
   <item id="40013" name="Increase Vitality" cname="ITEM_PET2_ENC_70_C" desc="When your HP falls below 50%, your some of HP is recovered." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c_1.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_C" />
   </item>
   <item id="40030" name="Recover" cname="ITEM_PET2_ENC_70_D" desc="When your MP falls below 50%, your some of MP is recovered." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_D" />
   </item>
</itens>
XML;

?>

 

 

 

Script

<?php

$DOMDocument = new DOMDocument( '1.0', 'UTF-8' );
$DOMDocument->preserveWhiteSpace = false;
$DOMDocument->loadXML( $xml, LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG );

$array = new ArrayObject( );
$properties = array( 'id', 'name', 'cname', 'pict' );

foreach( $DOMDocument->getElementsByTagName( 'item' ) as $childNodes )
{
   $obj = new stdClass( );

   foreach( $childNodes->attributes as $property => $value )
   {
       if( in_array( $property, $properties ) )
       {
           $obj->$property = $value;
       }
   }

   $array->append( $obj );
}

// pegar o primeiro item do array
var_dump( $array->offsetGet( 0 ) );

// acessar a propriedade name e regatar o valor
var_dump( $array->offsetGet( 0 )->name->value );

?>

 

Saídas:


object(stdClass)[8]
 public 'id' => 
   object(DOMAttr)[10]
 public 'name' => 
   object(DOMAttr)[12]
 public 'cname' => 
   object(DOMAttr)[13]
 public 'pict' => 
   object(DOMAttr)[14]

string 'Concentration' (length=13)

 

Fica a dica :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leia o erro.

 

Node no longer exists (nó não existe mais). Não sei porque haveria de ter esse "mais" na possível tradução, mas significa que o nó que está tentando acessar não existe.

 

Vocêpercebeu que o XML que você postou não possui nenhum nó chamado Message? o.O

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Alessandro: Tudo o que você precisa está no manual. :thumbsup:

 

Releia meu post anterior e veja o porquê não funcionou contigo. Depois veja o exemplo abaixo:

 

 

<?php

$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<itens>
   <item id="39962" name="Concentration" cname="ITEM_PET2_PRO_70_F" desc="When the Fellow's HP falls below 70%, the Fellow's Magic Defense is increased." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_pro_around_c.png" stack="1" sexe="4" degree="1">
       <attr v="-1" s="P2SKILL_PRO_70_F" />
   </item>
   <item id="39979" name="Increase Strength" cname="ITEM_PET2_ENC_70_A" desc="Increases your Strength." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c_1.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_A" />
   </item>
   <item id="39996" name="Increase Intelligence" cname="ITEM_PET2_ENC_70_B" desc="Increases your Intelligence." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_B" />
   </item>
   <item id="40013" name="Increase Vitality" cname="ITEM_PET2_ENC_70_C" desc="When your HP falls below 50%, your some of HP is recovered." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c_1.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_C" />
   </item>
   <item id="40030" name="Recover" cname="ITEM_PET2_ENC_70_D" desc="When your MP falls below 50%, your some of MP is recovered." isMall="0" type="3" type2="0" canTrade="1" canEquip="0" buy="591000" sell="0" r1="1" t1="70" r2="-1" t2="0" r3="-1" t3="0" r4="-1" t4="0" r5="-1" t5="0" pict="pet2\skill\pet2_skill_enc_around_c.png" stack="1" sexe="5" degree="1">
       <attr v="-1" s="P2SKILL_ENC_70_D" />
   </item>
</itens>
XML;

$sXML = new SimpleXMLElement( $xml );

foreach( $sXML -> item as $item ) {

   $attr = $item -> attributes();

   printf(

       '<p>
            <strong>ID:</strong> %d
        </p>

        <p>
            <strong>Name:</strong> %s
        </p>

        <p>
            <strong>CName:</strong> %s
        </p>

        <p>
            <strong>Pict:</strong>

            <br /><br />

            <img src="%s" />
        </p>

        <hr />',

        $attr -> id, $attr -> name, $attr -> cname, $attr -> pict
   );
}

 

 

@Carlos: A DOMDocument é a alternativa mais robusta, mas se ele não conseguiu com a SimpleXML que é mais simples de todas as formas, compreender a verbosidade e a complexidade da DOM seria uma Odisséia. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado a todos ! um amigo me ajudo com a função :) mais vocês me ajudaram muito tbm ^^

 

alguem poderia me dizer como eu faço para colocar um valor com \ no abnco de dados

 

ele ta cadastrando a imagem da seguinte forma itemchinawoman_itemclothes_01_ca.png

mais o correto seria item\china\woman_item\clothes_01_ca.png

 

alguem poderia me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.