Ir para conteúdo

POWERED BY:

Arquivado

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

michelmfreitas

[Resolvido] Erro na criação de XML com PHP

Recommended Posts

Pessoal, tudo bem?

 

estou gerando um arquivo XML pelo PHP, e, claro, teve que dar pau em algumas rotinas (de praxe! rss)

 

O erro em questão é:

 

Warning: DOMDocument::createElement(): unterminated entity reference Daly, D.C. 1991 in C:\mowes\www\PASTA\ARQUIVO.php on line 757

Procurei no Google e não encontrei nada que entendesse sobre esse erro. O que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que postar não apenas o erro, mas o código que está gerando o XML e qual informação está sendo inserida nos nós criados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o código com a numeração das linhas. Postei o erro pois queria saber que tipo de erro era aquele pra tentar solucionar. =)

 

756 $autorEspecie = $dom->createElement("autorEspecie", "{$dados['idautor']}");
757 $referenciasBibliograficas = $dom->createElement("referenciasBibliograficas", "{$dados['ref_bibliografica']}");
758 $nomePopular = $dom->createElement("nomePopular", "{$dados['nome_popular']}");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, mas ainda não dá para ajudar.

 

Esse erro normalmente se refere a alguma coisa no texto que não foi devidamente encerrada, no caso uma entity (entidade HTML)

 

No erro mostra o valor de sua variável $dados['ref_bibliografica'] como sendo Daly, D.C. 1991

 

Com isso, reproduzi o código:

 

<?php

$dom = new DOMDocument('1.0', 'utf-8');

$element = $dom->createElement('referenciasBibliograficas', 'Daly, D.C. 1991');

$dom->appendChild($element);

echo $dom->saveXML();

E não obtive erro nenhum. Testei substituindo o valor string por uma variável, para usar as chaves desnecessárias que você usou e também não tive nenhum erro.

 

O que me leva a pedir que poste um pouco mais do código, algumas linhas para cima para que possamos analisar como que essa variável, com esse valor está sendo constuída.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, aí vai minha classe completa. =)

 

O que eu achei estranho é que os outros dados foram normalmente. E são strings, como o desse que deu esse Warning

 


function CriarXML($idUsuario){

            #versão do encoding XML
            $dom = new DOMDocument("1.0", "ISO-8859-1");#versão do encoding XML
            
            #retira os espaços em branco
            $dom->preserveWhiteSpace = false;

            #gera o código
            $dom->formatOutput = true;

            #criando o nó principal
            $root = $dom->createElement("herbario");

            #nó filho
            $item = $dom->createElement("item");

            $sql1 = "SELECT e.id, e.especie, e.nome_popular, e.descricao, e.idautor, g.genero, e.nome_popular, e.descricao, e.periodo_flor_frut,
                    e.estipulas, e.latex, e.divisao_limo_foliar, e.soldadura_calice, e.numero_sepalas, e.soldadura_corola, e.numero_petalas,
                    e.consistencia_fruto, e.ref_bibliografica, e.obs, gr.grupo, g.genero, f.familia, f.idautor AS autorFamilia, g.idautor AS autorGenero
                    FROM hd_especies AS e
                    INNER JOIN hd_generos AS g ON e.idgenero = g.id
                    INNER JOIN hd_familias AS f ON g.idfamilia = f.id
                    INNER JOIN hd_grupos AS gr ON f.idgrupo = gr.id
                    ORDER BY e.id ASC";

            $rs = $this->DB->GetArray($sql1);
            $i=0;

            foreach($rs as $rs1){

                $sql2 = "SELECT df.disposicao_folhas
                        FROM hd_disposicao_folhas AS df
                        INNER JOIN hd_especie_disposicao_folhas AS edf ON df.id = edf.iddisposicaofolhas
                        WHERE edf.idespecie = {$rs1['id']}";

                $rs2 = $this->DB->GetArray($sql2);

                $sql3 = "SELECT dg.uf FROM hd_distribuicao_geografica AS dg
                        INNER JOIN estados AS e ON dg.uf = e.id
                        WHERE dg.idespecie =  {$rs1['id']}";

                $rs3 = $this->DB->GetArray($sql3);

                foreach($rs3 as $dg){
                    $distGeo .= ", {$dg['uf']}";
                }

                $distGeografica = substr($distGeo, 1);
                
                $sql4 = "SELECT fv.formacao_vegetal
                        FROM hd_formacao_vegetal AS fv
                        INNER JOIN hd_especies_formacao_vegetal AS efv ON efv.idformacaovegetal = fv.id
                        WHERE fv.idespecie = {$rs1['id']}";

                $rs4 = $this->DB->GetArray($sql4);

                $sql5 = "SELECT h.habito
                        FROM hd_habitos AS h
                        INNER JOIN hd_especie_habito AS eh ON eh.idhabito = h.id
                        WHERE eh.idespecie = {$rs1['id']}";

                $rs5 = $this->DB->GetArray($sql5);

                $sql6 = "SELECT np.num_petalas
                        FROM hd_num_petalas AS np
                        WHERE np.idespecie = {$rs1['id']}";

                $rs6 = $this->DB->GetArray($sql6);

                $sql7 = "SELECT ns.num_sepalas
                        FROM hd_num_sepalas AS ns
                        WHERE ns.idespecie = {$rs1['id']}";

                $rs7 = $this->DB->GetArray($sql7);

                $sql8 = "SELECT autor FROM hd_autores WHERE id = {$rs1['autorFamilia']}";
                $autorFamilia = $this->DB->GetOne($sql8);

                $autorGenero = $this->DB->GetOne("SELECT autor FROM hd_autores WHERE id = {$rs1['autorGenero']}");
                $autorEspecie = $this->DB->GetOne("SELECT autor FROM hd_autores WHERE id = {$rs1['idautor']}");

                #criando nós filhos
                $grupo = $dom->createElement("grupo", "{$rs1['grupo']}");
                $familia = $dom->createElement("familia", "{$rs1['familia']}");
                $autorFamilia = $dom->createElement("autorFamilia", "{$autorFamilia}");
                $genero = $dom->createElement("genero", "{$rs1['genero']}");
                $autorGenero = $dom->createElement("autorGenero", "{$autorGenero}");
                $especie = $dom->createElement("especie", "{$rs1['especie']}");
                $autorEspecie = $dom->createElement("autorEspecie", "{$rs1['idautor']}");
                $referenciasBibliograficas = $dom->createElement("referenciasBibliograficas", "{$rs1['ref_bibliografica']}");
                $nomePopular = $dom->createElement("nomePopular", "{$rs1['nome_popular']}");
                $distGeografica = $dom->createElement("distGeografica", "{$rs1['grupo']}");
                $formacaoVegetal = $dom->createElement("formacaoVegetal", "{$rs1['grupo']}");
                $floracaoFrutificacao = $dom->createElement("floracaoFrutificacao", "{$rs1['grupo']}");
                $links = $dom->createElement("links", "{$rs1['grupo']}");
                $obs = $dom->createElement("obs", "{$rs1['grupo']}");
                $habito = $dom->createElement("habito", "{$rs1['grupo']}");
                $estipulas = $dom->createElement("estipulas", "{$rs1['grupo']}");
                $latex = $dom->createElement("latex", "{$rs1['grupo']}");
                $dispFolhas = $dom->createElement("dispFolhas", "{$rs1['grupo']}");
                $limboFoliar = $dom->createElement("limboFoliar", "{$rs1['grupo']}");
                $soldaduraCalice = $dom->createElement("soldaduraCalice", "{$rs1['grupo']}");
                $num_sepalas = $dom->createElement("num_sepalas", "{$rs1['grupo']}");
                $num_petalas = $dom->createElement("num_petalas", "{$rs1['grupo']}");
                $soldaduraCorola = $dom->createElement("soldaduraCorola", "{$rs1['grupo']}");
                $consistenciaFruto = $dom->createElement("consistenciaFruto", "{$rs1['grupo']}");

                // os dados acima são apenas exemplos

                $i++;

                //destruindo variaveis
                unset($distGeografica);
                
            }

            

        }

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.