quarta-feira, 24 de junho de 2009

Lendo um XML apartir de uma String em PHP

Bom, estava a precisar de um código que lesse um XML apartir de uma string vinda de um Webservice. Até ai tudo bem, mas o XML vem com varios nodes e eu queria algo que lesse o XML identificasse cada node e dai faria o que queria com as informações. Primeiro eu encontrei no proprio php.net uma forma de leitura até boa, porém eu teria que colocar pra cada caso seus nodes o que tornaria o código bem extenso, a form foi a seguinte:

$xmlDados = new DOMDocument();
$xmlDados->loadXML($objDadosService->enviarDados());
$flagA = $xmlDados->getElementsByTagName( "node" );
foreach( $flagA as $flag )
{
$codigo = $flag->getElementsByTagName( "codigo" );
$codigo = $codigo->item(0)->nodeValue;

$data_cadastro = $flag->getElementsByTagName( "data_cadastro" );
$data_cadastro = $data_cadastro->item(0)->nodeValue;

$quarto = $flag->getElementsByTagName( "quarto" );
$quarto = $quarto->item(0)->nodeValue;

$cliente = $flag->getElementsByTagName( "cliente" );
$cliente = $cliente->item(0)->nodeValue;

echo "$codigo - $data_cadastro - $quarto - $cliente
";
}
?>

uma boa solução para um xml pequeno, porém o XML que estou a analizar tem varias tag e essas tag podem ser diferentes então fiz a seguinte função:

Parametros:
$xmlDoc: objeto DomDocument, já com XML carregado.
$flag: node que se deseja ler e importar para um array

Retorno:
Um array com os valores daquele node.


function readXML($xmlDoc,$flag = "")
{
$nodeFlag = $xmlDoc->getElementsByTagName( $flag );
if ( $nodeFlag->length )
{
$arrFlag = array();
for ( $k = 0; $k < $nodeFlag->length; $k++)
{
$nodes = $nodeFlag->item(0)->getElementsByTagName( "*" );
for ( $i = 0; $i < $nodes->length; $i++ )
{
$arrFlag[$k][$nodes->item( $i )->nodeName] = $nodes->item( $i )->nodeValue;
}
}
return $arrFlag;
}
else
{
return false;
}

}

# Exemplo: #

$xmlDados = new DOMDocument();
$xmlDados->loadXML("


Fulanofulano@fulano.com.br


Cicranocicrano@fulano.com.br


Beltranobeltrano@fulano.com.br

TeresaPortuguês");

$arrFlags = array();
$arrFlags = readXML($xmlDados,"alunos");



O resultado será um array com os dados dos alunos !

domingo, 21 de junho de 2009

Certificação

To estudando pra tirar minha certificação PHP, não sei se o pesa muito no mercado, mas eu quero tirar mais por mim. Baixei alguns materiais pra estudar e vi que não vai ser facil, eles abordam temas de forma bem complexa e muitas outras coisas que não utilizo muito no meu dia-a-dia, pretendo fazer uns simulados no inicio de Julho e no fim do mês faço a prova !

inté+

Operadores Bit-a-Bit (Bitwise Operators)

Operadores Bit-a-Bit
1. AND
O operador AND é representado por "&". Uma expressão onde é utilizada o operador AND, para ser verdadeira (TRUE) os bits têm ambos de possuir o valor 1. Em caso de um, ou os dois serem 0 a expressão devolve o valor 0. Como qualquer valor multiplicado por 0 é igual a 0, o operador AND é muitas vezes associado à multiplicação.

Tabela da verdade:

0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1

Exemplo: $a = $b & $c;
Supondo que $b = 10101011 e $c = 10000111:

$a =
10101011 &
10000111
--------------------
10000011
(...)
$a = 10000011;


2. OR

O operador OR é representado por "|". Uma expressão para ser verdadeira pelo menos um dos bits tem de ser 1, ou seja, só se os dois bits forem igual a 0 é que uma expressão é falsa.

Tabela da verdade:

0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1

Exemplo: $a = $b | $c;
Supondo que $b = 10101011 e $c = 10000111:

$a =
10101011 |
10000111
--------------------
10101111
(...)
$a = 10101111;


3. NOT
O operador NOT é um operador unário e é representado por "~". A operação exercida por este operador é de negação lógica sobre os bits, isto é, torna falso onde é verdadeiro e torna verdadeiro onde é falso.

Tabela da verdade:

NOT 1 = 0
NOT 0 = 1


Exemplo: $a = ~$b;
Supondo que $b = 10101011;

$a = ~(10101011);
(...)
$a = 01010100;


4. XOR
O operador XOR (Ou Exclusivo) é representado por "^". Com este operador, se os bits forem diferentes os bits resultantes são verdadeiros.

Tabela da verdade:

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0


Exemplo: $a = $b ^ $c;
Supondo que $b = 10101011 e $c = 10000111:

$a =
10101011 ^
10000111
-------------------------------
00101100
(...)
$a = 00101100;


5. Shifts
O operador Shift desloca N bits à esquerda ou direita dependendo se for utilizado Shift Left ou Shift Right. Devido à rapidez, são muitas vezes usadas na programação como multiplicador ou divisor como substituição dos operadores "*" e "/".

6. Shift Left (Deslocar à esquerda)
O operador Shift Left desloca à esquerda N bits. Pode-se entender o shift left como uma multiplicação por 2 elevado a N. É de salientar que um número elevado a 0 é igual a 1, logo, o shift left de 0 equivale à multiplicação por 1.

Exemplo: $a = 10101011;

$a << 0 =" 10101011;" 1 =" 01010110;" 2 =" 10101100;" 3 =" 01011000;" 4 =" 10110000;" 5 =" 01100000;" a =" 10101011;">> 0 = 10101011;
$a >> 1 = 01010101;
$a >> 2 = 00101010;
$a >> 3 = 00010101;
$a >> 4 = 00001010;
$a >> 5 = 00000101;