Ir para conteúdo

Arquivado

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

Wesley Balestrini

Xml + PHP

Recommended Posts

Olá pessoal!

Tenho os seguintes arquivos XML e PHP, lembrando que é um teste, pois estou aprendendo sobre.


TextErros.xml

<TEXT>   
  <nome>Erro1</nome>
  <portugues>Não foi possível conectar ao banco de dados!</portugues>      
  <ingles>Unable to connect to database!</ingles>
</TEXT>
<TEXT>   
  <nome>Erro2</nome>
  <portugues>Senha invalida!</portugues>
  <ingles>Password invalid!</ingles> 
</TEXT>


connect.php

$lingua  = "portugues";
$xml     = simplexml_load_file(TextErros.xml);
$connect = mysql_connect("localhost","root","") or die ($erro1);

Bem, a duvida é, como eu faço para o PHP, sabendo que a variavel $lingua é igual á portugues, buscar o valor da tag portugues em Erro1. Sei que "portugues" não é "filho" de "Erro1", mas sei que tem como fazer isso, pois no jogo civilization IV é assim. Porém, lá não é com php, então não sei se da certo. Preciso de uma luz ai pessoal.

Obs.: Sei que, para pegar o valor destas tags eu uso:

foreach($xml -> TEXT as $text){
      echo $text -> portugues."<br/>";
}

Retornaria:

Não foi possível conectar ao banco de dados!

Senha invalida!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um if .

 


foreach($xml -> TEXT as $text){ 
      echo $text -> portugues."<br/>";    
      $erro=$text -> nome;
        
         if ($erro="português"){
             faça algo......
         }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom cara, eu já teria uma abordagem diferente. Assim simplificaria a forma como seria "puxada" a mensagem.

<?php

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<errors>   
    <error name="Error 1">
        <portuguese>Não foi possível conectar ao banco de dados!</portuguese>      
        <english>Unable to connect to database!</english>
    </error>  
    <error name="Error 2">
        <portuguese>Senha invalida!</portuguese>      
        <english>Password invalid!</english>
    </error>
</errors>
XML;

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

$search   = 'Error 2';
$language = 'portuguese';
$error    = $DOMXPath->query( sprintf( './/error[@name="%s"]', $search ) )->item( 0 );

echo $error->getElementsByTagName( $language )->item( 0 )->nodeValue;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Bom cara, eu já teria uma abordagem diferente. Assim simplificaria a forma como seria "puxada" a mensagem.

<?php

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<errors>   
    <error name="Error 1">
        <portuguese>Não foi possível conectar ao banco de dados!</portuguese>      
        <english>Unable to connect to database!</english>
    </error>  
    <error name="Error 2">
        <portuguese>Senha invalida!</portuguese>      
        <english>Password invalid!</english>
    </error>
</errors>
XML;

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

$search   = 'Error 2';
$language = 'portuguese';
$error    = $DOMXPath->query( sprintf( './/error[@name="%s"]', $search ) )->item( 0 );

echo $error->getElementsByTagName( $language )->item( 0 )->nodeValue;

?>

Carlos Coelho, eu estou aprendendo agora sobre isso, e não sei muito sobre DOM. Você poderia explicar o que está sendo feito em cada linha sobre DOM, no seu código. Lembrando que, o arquivo xml, tem que ser externo. E, teria que ser algo simples, pois no sistema todo ( que estou desenvolvendo), os textos serão "puxados" do xml, e talvez não será muito legal escrever tantas linha apenas para colocar uma mensagem. Bem, explique primeiro como funciona este codigo, por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta criar um arquivo .xml e "puxar" usando DOMDocument:: load

Lembrando que, o arquivo xml, tem que ser externo.

 

 

 

Aqui tem um bom tutorial do colega Andrey Knupp Vital

 

 

:seta: DOMDocument - XML { PHP }, Parte - 1

:seta: DOMDocument - XML { PHP }, Parte - 2

:seta: DOMDocument - XML { PHP }, Parte - 3

:seta: DOMDocument - XML { PHP }, Parte - 4

:seta: DOMDocument - XML { PHP }, Parte - 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda Carlos Coelho, e á todos que agiram de boa fé ao tentar me ajudar, vou agora mesmo em plena madrugada "mergulhar" neste mundo fantástico da programação! Espero ainda nesta semana retornar com com boas noticias. Vou seguir seus links e aprender o que está sendo proposto, se eu tiver mais duvidas no meio deste processo, eu recorrerei á este tópico, tudo bem?

 

Muito obrigado novamente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com certeza, estamos todos aqui para compartilhar conhecimento.

se eu tiver mais duvidas no meio deste processo, eu recorrerei á este tópico, tudo bem?

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, irei explicar mais do porque quero trabalhar com xml. Estou fazendo um sistema, onde todos os textos que serão exibidos na interface, e alguns valores de variáveis, estarão arquivados em um documento externo. Assim, creio eu, será mais fácil para manipular eles, cheguei a esta conclusão estudando como é a organização de jogos instalados em meu pc, Civilization IV foi o maior deles.

Tenho um arquivo chamado connect.php em uma pasta, e outro chamada TextBugs.php em outra. Quando relizei a conexão no primeiro arquivo, fiz o seguinte:

 

require_once("../pasta/TextBugs.php");


$connect = mysql_connect("localhost","root","") or die($TextBugConnect_001);

 

Como já devem ter entendido, ao envés de escrever a mensagem de erro personalizada no "or die", eu "puxo" ela de um arquivo externo, onde terei todas as mensagens, divididas e organizadas, para fácil compreensão e futuras edições. Realmente isso é burocratizar a programação deste sistema, mas creio ser uma maneira inteligente de burocracia, se é que eu posso dizer assim.

Agora, o dilema, no jogo citado acima, eles usam XML + Python, sendo, obviamente, o XML responsável por guardar estes "textos". Observando isso resolvi também usar xml, por isso a existência deste tópico, entretanto, agora que iniciei um estudo mais profundo sobre, aparentemente, irei usar xml e DOM, e outros afins, tornando o codigo mai extensso, o que eu não queria! A questão é, compensa usar XML ou continuar com arquivos php externos? Pois vejam a diferença:

 

XML + PHP (uma solução possível)


<?php $xml = <<<XML <?xml version="1.0" encoding="UTF-8"?>
 <errors> 
<error name="Error 1"> 
<portuguese>Não foi possível conectar ao banco de dados!</portuguese>
 <english>Unable to connect to database!</english>
 </error> 
<error name="Error 2"> 
<portuguese>Senha invalida!</portuguese> 
<english>Password invalid!</english> 
</error> 
</errors> XML;
 $DOMDocument = new DOMDocument( '1.0', 'UTF-8' ); 
$DOMDocument->preserveWhiteSpace = false;
 $DOMDocument->loadXML( $xml );
 $DOMXPath = new DOMXPath( $DOMDocument ); 
$search = 'Error 2';
 $language = 'portuguese';
 $error = $DOMXPath->query( sprintf( './/error[@name="%s"]', $search ) )->item( 0 ); echo $error->getElementsByTagName( $language )->item( 0 )->nodeValue; ?>

 

PHP + PHP(minha solução atual)

<PHP
//Arquivo TextBugs.php(externo)
/***Arquivo connect.php***/
$TextBugsConnect_001 = "Não foi possível conectar ao sevidor(Erro 001)";
?>

<PHP
//Arquivo connect.php
require_once("TextBugs.php");
@$connect = mysql_connect("localhost","root","") or die($TextBugsConnect_001);
?>

 

Sobre as possiveis linguagens, eu teria Arquivos diferentes em pastas diferentes, exibindo os textos em suas respectivas linguagens.

 

Notem que no arquivo connect, eu exibo a mensagem correta em poucos carácteres, e o arquivo textBugs.php

, também não é muito longo para cada mensagem!

 

Resumindo, acho que do jeito atual, é mais fácil rápido e "limpo", tenho medo de ter optado pelo xml, apenas para imitar a maneira que o jogo foi feito, e não ter me concentrado no que é mais importante, a organização!

 

PS.: Desculpem se eu procrastinei de mais a minha questão, no entanto, gosto de explicar bem o meu raciocínio.

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.