Ir para conteúdo

POWERED BY:

Arquivado

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

anoxia

Ler XML com Prefixo no PHP

Recommended Posts

Boa Tarde Galera!

Comprei um livro, estou estudando a class DOMDocument mas estou com uma certa dificuldade em ler um XML do tipo abaixo com o PHP:

 

<a:loja>

<a:produtos>

<a:produto codigo="1234">Carrinho de Brinquedo</a:produto>

<a:cor>vermelho</a:vermelho>

<a:preco>R$ 25,00</a:preco>

</a:produtos>

<a:produtos>

<a:produto codigo="3214">Bola de Futebol</a:produto>

<a:cor>preto</a:vermelho>

<a:preco>R$ 15,00</a:preco>

</a:produtos>

<a:produtos>

<a:produto codigo="4321">Pula-pula</a:produto>

<a:cor>amarelo</a:vermelho>

<a:preco>R$ 7,00</a:preco>

</a:produtos>

</a:loja>

 

1º Como posso pegar o valor do "codigo" do primeiro produto (Carrinho de Brinquedo)?

2º Como posso pegar o valor (R$ 25,00) da tag <a:preco> do primeiro prinquedo (Carrinho de Brinquedo)?

3º Como saber quantos elementos tem na tag <a:loja>?

 

OBS.: Dou preferencia para DOMObject mas pode ser qualquer outro método

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia ser:

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<estudos>
<dado>Ola</dado>
<dado>Alaerte Gabriel, você tem</dado>
<dado>19 Anos</dado>
<dado>e é do sexo Masculino</dado>
</estudos>

para ler:

 

<?php
//Carrego o arquivo XML
$ver = simplexml_load_file('dados.xml');

print $ver->dado[0].'<br />';
print $ver->dado[1].'<br />';
print $ver->dado[2].'<br />';
print $ver->dado[3].'<br />';
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei como buscar dados em um XML sem prefixo, o problema é que o XML já está pronto, e está com prefixo tenho com buscar na estrutura que eu falei

Compartilhar este post


Link para o post
Compartilhar em outros sites

valew Bruno mas já tentei mas ocorre este erro !!

 

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: Entity: line 3828: parser error : Start tag expected, '<' not found inC:\wamp\www\ampar\xml\LancamentosContabeis.php on line 4

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: in C:\wamp\www\ampar\xml\LancamentosContabeis.php on line 4

Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ^ in C:\wamp\www\ampar\xml\LancamentosContabeis.php on line 4

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\ampar\xml\LancamentosContabeis.php:4 Stack trace: #0 C:\wamp\www\ampar\xml\LancamentosContabeis.php(4): SimpleXMLElement->__construct('? ? ? ? ? ...') #1 {main} thrown in C:\wamp\www\ampar\xml\LancamentosContabeis.php on line 4

Compartilhar este post


Link para o post
Compartilhar em outros sites

simplexml_load_file("LancamentosContabeis.xml") or die ("erro");

 

será que existe um tamanho do arquivo estipulado no wamp pois o arquivo é 10 mega e quando eu coloquei "or die" ele mostra minha mensagem de erro como se não carregasse o arquivo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Difícil mesmo é tentar adivinhar como esta a estrutura de seu xml, o exemplo do post #1 é de 2008 esta totalmente errado, não é daquela forma que se estrutura namespace em xml

 

um exemplo básico de com usar namespace seria desta forma.

<?php 

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?> 
   <people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test"> 
		<items> 
            <title>Name</title> 
            <p:person id="1">John Doe</p:person> 
            <p:person id="2">Susie Q. Public</p:person> 
            <p:person id="3">Fish Man</p:person> 
		</items>
		
		<price> 
            <title>Price</title> 
            <p:price id="1">5</p:price> 
            <p:price id="2">10</p:price> 
            <p:price id="3">15</p:price> 
		</price> 
			
   </people> 
XML;


$sxe = new SimpleXMLElement($xml);

foreach ($sxe as $out_ns) 
{ 
    $ns = $out_ns->getNamespaces(true);
    $child = $out_ns->children($ns['p']);
    foreach ($child as $out) 
    { 
        echo $out . "<br />"; 
    } 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá aí a demostração 
 
<?php 
$arquivo = file_get_contents("LancamentosContabeis.xml");
 
$xml = new SimpleXMLElement($arquivo);
 
$namespaces = $xml->getNamespaces(true);
 
foreach ($xml->children($namespaces["lan"]) as $dados) {
echo $dados->numeroRegiOuLancamento.'<br>';
echo $dados->historicoRegiContabil.'<br>';
}
 
?> 

o post do Williams Duarte resolve !

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.