Ir para conteúdo

POWERED BY:

Arquivado

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

marcelo almeida

Xml em 3 colunas

Recommended Posts

Pessoal tudo bem?

 

Eu fiz um xml e dentro dele esta assim

 

<?xml version="1.0" encoding="ISO-8859-1" ?>
<content>
   <gallery>
<caption>01</caption>
<image>/imagens/01.jpg</image>
<txt>Imagem 01</txt>
<url>http://</url>
   </gallery>
<gallery>
<caption>02</caption>
<image>/imagens/02.jpg</image>
<txt>Imagem 02</txt>
<url>http://</url>
   </gallery>
</content>

 

 

E assim por diante

 

Mas eu não estou conseguindo fazer ele ficar em 3 colunas dentro do PHP será que alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou mover para PHP para que te ajudem a processar o documento XML corretamente em listas. Após isso, peça para um moderador mover (ou crie um novo) o tópico de volta para webstandardas para posicionar a lista com CSS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcelo,

 

A primeira coisa que você precisa é definir qual será a informação que você vai organizar em colunas. Para ler o XML você pode utilizar DOM:

 

<?php
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load( 'seu-arquivo.xml' );

foreach ( $dom->getElementsByTagName( 'gallery' ) as $gallery ){
$caption = $gallery->childNodes->item( 0 )->nodeValue;
$image = $gallery->childNodes->item( 1 )->nodeValue;
$txt = $gallery->childNodes->item( 2 )->nodeValue;
$url = $gallery->childNodes->item( 3 )->nodeValue;

//aqui você define como exibirá a informação
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho até vergonha de mostrar porque estou aprendendo ainda me desculpem

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load( 'imagem.xml' );

foreach ( $dom->getElementsByTagName( 'gallery' ) as $gallery ){
       $caption = $gallery->childNodes->item( 0 )->nodeValue;
       $image = $gallery->childNodes->item( 1 )->nodeValue;
       $txt = $gallery->childNodes->item( 2 )->nodeValue;
       $url = $gallery->childNodes->item( 3 )->nodeValue;

       echo <<<EOF
       <table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
               <td>{$gallery->getElementsByTagName('caption')->item(0)->nodeValue}{$gallery->getElementsByTagName('image')->item(0)->nodeValue}{$gallery->getElementsByTagName('txt')->item(0)->nodeValue}{$gallery->getElementsByTagName('url')->item(0)->nodeValue}</td>
               <td>{$gallery->getElementsByTagName('caption')->item(1)->nodeValue}{$gallery->getElementsByTagName('image')->item(1)->nodeValue}{$gallery->getElementsByTagName('txt')->item(1)->nodeValue}{$gallery->getElementsByTagName('url')->item(1)->nodeValue}</td>
               <td>{$gallery->getElementsByTagName('txt')->item(0)->nodeValue}</td>
               <td>{$gallery->getElementsByTagName('url')->item(0)->nodeValue}</td>

       </tr>

EOF;
}
echo '</table>';
?>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se envergonhe, ninguém nasceu sabendo a programar...

 

Bom, o seu $gallery, no foreach está retornando um DOMElement e o método item() pertence a DOMNodeList

 

Para funcionar da forma que fez, seu $caption, por exemplo, deveria ser, dentro do loop:

 

$gallery -> getElementsByTagName( 'caption' ) -> item(0) -> nodeValue

getElementsByTagName() retorna um DOMNodeList e, com isso, item() existirá.

 

Agora, se você trocar seu foreach, por um for-loop, você dispensa o uso de mais um getElementsByTagName() pois o valor corrente já será um DOMNodeList:

 

$node = $dom->getElementsByTagName('gallery');
for($c = 0; $c<$node->length; $c++){
    // Do something

}

Mas ainda assim é complicado para fazer uma galeria simples, que é o que parece.

 

Eu acredito que no seu caso, o melhor seria usar a SimpleXML que como o nome diz, é simples:

 

$xml = simplexml_load_file('imagem.xml');

$gallery = array();

foreach( $xml as $gallery ) {

   $galleries[] = array( (string) $gallery -> caption,
                         (string) $gallery -> image,
                         (string) $gallery -> txt,
                         (string) $gallery -> url );
}

print '<pre>'; print_r( $galleries );

Saída:

 

Array
(
    [0] => Array
        (
            [0] => Caption
            [1] => Image
            [2] => TXT
            [3] => URL
        )

    [1] => Array
        (
            [0] => Caption 2
            [1] => Image 2
            [2] => TXT 2
            [3] => URL 2
        )

)
Como você não passou o arquivo XML, eu criei um próprio. Se quiser como referência para talvez reestruturar o seu:

 

 

<?xml version="1.0" encoding="utf-8" ?>
<galleries>
    <gallery>
        <caption>Caption</caption>
        <image>Image</image>
        <txt>TXT</txt>
        <url>URL</url>
    </gallery>
    <gallery>
        <caption>Caption 2</caption>
        <image>Image 2</image>
        <txt>TXT 2</txt>
        <url>URL 2</url>
    </gallery>
</galleries>

 

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.