Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
tenho um código para tratar aqui e estava conseguindo,só que me deparei
um erro por parte de minha lógica.
Acontece porque vou lidar com linhas na raiz, linhas dentro de pasta
e, nem sempre, linhas dentro de pastas de estão dentro de pastas, que
também podem estar dentro de pastas.
A treta é que que inventou esse padrão de html não tinha mãe..kkkk
Ex:
<DL><p>
<DT><H3 FOLDED ADD_DATE="1237830784">Links</H3>
<DL><p>
<DT><H3 FOLDED ADD_DATE="1250814645">casa</H3>
<DL><p>
<DT><A HREF="[http://go.microsoft.com/fwlink/?LinkId=121315"](http://go.microsoft.com/fwlink/?LinkId=121315) >Galeria do Web Slice.url</A>
</DL><p>
<DT><A HREF="[http://www.microsoft.com/isapi/redir.dll?prd=ie&ar=hotmail"](http://www.microsoft.com/isapi/redir.dll?prd=ie&ar=hotmail) >HotMail gratuito.url</A>
</DL><p>
<DT><H3 FOLDED ADD_DATE="1249731570">Sites da Microsoft na Web</H3>
<DL><p>
<DT><A HREF="[http://go.microsoft.com/fwlink/?LinkId=72411"](http://go.microsoft.com/fwlink/?LinkId=72411) >Marketplace.url</A>
</DL><p>
<DT><A HREF="[http://diversao.terra.com.br/tv/interna/0,,OI3807253-EI13445,00.html"](http://diversao.terra.com.br/tv/interna/0,,OI3807253-EI13445,00.html) >'Caminho das Índias' Raj expulsa Maya de casa -.url</A>
<DT><A HREF="[http://www.pinceladasdaweb.com.br/blog/2008/01/21/8-expressoes-regulares-para-php-consideradas-uteis/"](http://www.pinceladasdaweb.com.br/blog/2008/01/21/8-expressoes-regulares-para-php-consideradas-uteis/) >8 Expressões Regulares para PHP consideradas úteis » Pinceladas da Web - XHTML, CSS, JavaScript e WebStandards.url</A>
</DL><p>
Pelo que eu pude notar aí, quem começa e termina sempre é '<DL><p>' ... </DL><p>.
Então, em idéia inicial, pra capturar tudo sem quebrar a integridade seria necessário
entrar em um '<DL><p>' ... </DL><p> primeiro, pra depois verificar se há outro. E também com
excessão da primeira ocorrência que é a que abre, verificar se há um <DT><H3>Links</H3>, que seria
o nome da pasta.
Alguém tem uma idéia de como começar a fazer?
Abraços, Cláudio
Olha, o que eu fiz não ficou bom não
Ele só varre os links da raiz e pastas da raiz.
pasta dentro de pasta, já da erro.
Mas do jeito que está aí, é só copiar e colar que funciona.
Abraços,
Segue(perdão por qualquer grosseria no codigo.rsrs):
<?php
error_reporting(E_ALL);
//$myFile = "bookmarks.html";
//$myFile = "bookmarks2.html";
//$myFile = "bookmarks3.html";
//$myFile = "bookmarks4.html";
$myFile = "bookmark.htm";
if (file_exists($myFile)) {
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
//preg_match('/<!(.*?)>/i', $theData, $url);
if(ereg_replace("<!(.*)</H1>", "", $theData) != $theData){
$theData = ereg_replace("<!(.*)</H1>", "", $theData);
$theData = split("</DL><p>", $theData);
echo '<ul>';
for($i = 0; $i < count($theData)-1; $i++){
//echo '<li>'.$theData[$i].'</li>';
//echo'<br /><br /><br /><br />';
echo '<li>';
echo '<ul>';
preg_match("/<H3 (.*?)>(.*?)<\/H3>/i", $theData[$i], $tags);
if (isset($tags[2])){
echo '<h3>'.$tags[2].'</h3><br />';
}
else{
//echo '<h3>Sem Organizar</h3><br />';
}
//$theData[$i] = split("<DT>", ereg_replace(".url","",ereg_replace("<(.*)</H3>", "", $theData[$i])));
$theData[$i] = split("<DT>",$theData[$i]);
for($j = 0; $j < count($theData[$i]); $j++){
preg_match('/A HREF=\"(.*?)\"/i', $theData[$i][$j], $url);
preg_match("/<A (.*?)>(.*?)<\/A>/i", $theData[$i][$j], $title);
if(isset($title[2]) && isset($url[1]))
{
echo '<li>';
//echo $theData[$i][$j];
echo $title[2].'<br />'.$url[1].'<br />'.'<br />';
echo '</li>';
}
}
//print_r($theData[$i]);
echo '</ul>';
echo '</li>';
}
echo '</ul>';
}
else{
echo 'nao posso continuar';
}
//print_r($url);
}
?>Já entendi o que tu queres fazer...
Eu não vou fazer o código pois estou sem tempo, mas depois se não conseguires ou mais ninguém te ajudar eu posso dar um jeito..
Mas tenta fazer assim:
. Cria uma função que liste o conteúdo de um directório;
. Verifica se dentro desse directório tem outros directórios, se tiver, você ai chama essa função novamente;
É só usar a lógica do seu código e implementar a recursão, ou seja, chamar a função dentro da mesma, pode também pesquisar no google por "php recursive dir" vai encontrar muita coisa util =)
olá,
consegui melhorar o código.
Eu converti ele para xml e utilizei a função xml2assoc($xml)
que achei no site do php.net para ler o xml.
Quanto a exibição, eu fiz um code para ler o conteúdo
que vem do xml. Pela mor...quanto for..kkkkkkk
Eu fiz um xml que, pra não esticar muito o code,
tem 2 links e 2 pastas na raiz. A primeira pasta possui
2 pastas (com 4 e 2 links respectivamente) e 1 link.
Já a segunda pasta apenas 2 links.
Agora...tomara que a ajuda divina ilumine alguém para
dar uma idéia de como fazer a recursão, para quebrar esse
paradigma de pasta dentro de pasta dentro de pasta.
E agora Papai do Céu?
Abraços a todos!!
Segue xml e php, é só copiar e colar que está funfando bem:
-bookmarks.xml
<?xml version="1.0" encoding="UTF-8"?>
<ul>
<li>
<h3>Portais</h3>
<ul>
<li>
<h3>Brasil</h3>
<ul>
<li><a href="[http://www.globo.com">globo.com
](http://www.globo.com)
<li><a href="[http://www.terra.com.br">Terra](http://www.terra.com.br) - Qual é a sua?</a></li>
<li><a href="[http://www.uol.com.br">Uol](http://www.uol.com.br) - O melhor conteúdo</a></li>
<li><a href="[http://www.brturbo.com.br">IG](http://www.brturbo.com.br) - O mundo é de quem faz</a></li>
</ul>
</li>
<li>
<h3>Eua</h3>
<ul>
<li><a href="[http://www.cnn.com">CNN
](http://www.cnn.com)
<li><a href="[http://www.nytimes.com">The](http://www.nytimes.com) New York Times</a></li>
</ul>
</li>
<li><a href="[http://www.china.cn">China](http://www.china.cn) Portal</a></li>
</ul>
</li>
<li>
<h3>E-mails</h3>
<ul>
<li><a href="[http://www.gmail.com">Gmail
](http://www.gmail.com)
<li><a href="http://www.hotmail.com">Hotmail
</ul>
</li>
<li><a href="[http://www.yahoo.com.br">Yahoo!](http://www.yahoo.com.br) Brasil</a></li>
<li><a href="[http://www.g1.com.br">G1](http://www.g1.com.br) - Globo</a></li>
</ul>
index.php
<?php
error_reporting(E_ALL);
$reader = new XMLReader();
$reader->open("bookmarks.xml");
$dados = xml2assoc($reader);
//echo("<pre>");
//print_r($dados);
//echo("</pre>");
echo "\n<ul>\n";
for($i = 0; $i < count($dados); $i++)
{
for($j = 0; $j < count($dados[$i])-1; $j++)
{
for($k = 0; $k < count($dados[$i]['value']); $k++)
{
for($l = 0; $l < count($dados[$i]['value'][$k])-1; $l++)
{
for($m = 0; $m < count($dados[$i]['value'][$k]['value']); $m++)
{
$dadoatual = $dados[$i]['value'][$k]['value'][$m];
if($dadoatual['tag'] == "h3")
{
echo "<li>";
echo "<h3>";
echo $dadoatual['value'];
echo "</h3>";
}
elseif($dadoatual['tag'] == "a")
{
echo "<li><a href=\"#\">";
echo $dadoatual['value'];
echo "</a></li>";
}
elseif($dadoatual['tag'] == "ul")
{
echo "<ul>";
for($n = 0; $n < count($dadoatual['value']); $n++)
{
for($o = 0; $o < count($dadoatual['value'][$n]); $o++)
{
if(isset($dadoatual['value'][$n]['value'][$o]['tag']) && $dadoatual['value'][$n]['value'][$o]['tag'] == "h3")
{
echo "<li>";
echo "<h3>";
echo $dadoatual['value'][$n]['value'][$o]['value'];
echo "</h3>";
}
elseif(isset($dadoatual['value'][$n]['value'][$o]['tag']) && $dadoatual['value'][$n]['value'][$o]['tag'] == "a")
{
echo "<li><a href=\"#\">";
echo $dadoatual['value'][$n]['value'][$o]['value'];
echo "</a></li>";
}
elseif(isset($dadoatual['value'][$n]['value'][$o]['tag']) && $dadoatual['value'][$n]['value'][$o]['tag'] == "ul")
{
echo "<ul>";
for($p = 0; $p < count($dadoatual['value'][$n]['value'][$o]['value']); $p++)
{
for($q = 0; $q < count($dadoatual['value'][$n]['value'][$o]['value'][$p])-1; $q++)
{
for($r = 0; $r < count($dadoatual['value'][$n]['value'][$o]['value'][$p]['value']); $r++)
{
if($dadoatual['value'][$n]['value'][$o]['value'][$p]['value'][$r]['tag'] == "a")
{
echo "<li><a href=\"#\">";
echo $dadoatual['value'][$n]['value'][$o]['value'][$p]['value'][$r]['value'];
echo "</a></li>";
}
}
}
}
echo "</ul>";
echo "</li>";
}
}
}
echo "</ul> ";
echo "</li>";
}
}
}
}
}
}
echo "\n</ul>\n";
function xml2assoc($xml) {
$tree = null;
while($xml->read())
switch ($xml->nodeType) {
case XMLReader::END_ELEMENT: return $tree;
case XMLReader::ELEMENT:
$node = array('tag' => $xml->name, 'value' => $xml->isEmptyElement ? '' : xml2assoc($xml));
if($xml->hasAttributes)
while($xml->moveToNextAttribute())
$node['attributes'][$xml->name] = $xml->value;
$tree[] = $node;
break;
case XMLReader::TEXT:
case XMLReader::CDATA:
$tree .= $xml->value;
}
return $tree;
}
?>
E qual é a sua duvida mesmo?
É erro no seu código?
Se sim coloque ele aqui para a gente te ajudar a resolver o mesmo...