Skip line in XML with PHP

Asked

Viewed 339 times

2

I am trying to insert values in xml using php, and I wanted to skip line before inserting if the file already exists so that it does not overwrite what is already there. However the FILE_APPEND of file_puts_content does not work, the links I found on this subject recommended putting "
", "\n", "r n" and PHP_EOL, but all of these present the error:

Catchable fatal error: Object of class Domelement could not be converted to string

Codes:

function addMensagem($documento, $mensagem, $cpf_origem, $nomeArquivo) {

date_default_timezone_set('America/Sao_Paulo');

if (!file_exists($nomeArquivo)) {
    // criar msg
    $msg = $documento->createElement("msg");
    // criar nó data
    $data = date('j/n/Y H:i');
    $dataElm = $documento->createElement("data_envio", $data);
    // criar nó origem
    $cpf_origemElm = $documento->createElement("cpf_origem", $cpf_origem);
    // criar nó mensagem (texto)
    $mensagemElm = $documento->createElement("mensagem", $mensagem);

    $msg->appendChild($dataElm);
    $msg->appendChild($cpf_origemElm);
    $msg->appendChild($mensagemElm);
    return $msg;
} else {
    // $xml = simplexml_load_file("mensagens.xml");
    // criar msg
    $msg = $documento->createElement("msg");
    // criar nó data
    $data = date('j/n/Y H:i');
    $dataElm = $documento->createElement("data_envio", $data);
    // criar nó origem
    $cpf_origemElm = $documento->createElement("cpf_origem", $cpf_origem);
    // criar nó mensagem (texto)
    $mensagemElm = $documento->createElement("mensagem", $mensagem);

    $msg->appendChild($dataElm);
    $msg->appendChild($cpf_origemElm);
    $msg->appendChild($mensagemElm);
    // aqui q recomendaram colocar os negocios de pular linha
    // nom $msg de baixo
    file_put_contents($nomeArquivo, $msg, FILE_APPEND);
    return $msg;
}
}

// versão do encoding xml
$dom = new DOMDocument("1.0", "ISO-8859-7");
// criando nó principal
$root = $dom->createElement("mensagens");
// retirar os espaços em branco
$dom->preserveWhiteSpace = false;
// gerar código ??
$dom->formatOutput = true;

$nomeArquivo = "mensagens.xml";
// utilizando a função para criar as mensagens
$msg = addMensagem($dom, "Teste2", "12345678911", $nomeArquivo);
// adicionando ao root
$root->appendChild($msg);
$dom->appendChild($root);

// salva o arquivo
$dom->save($nomeArquivo);
// mostrar
header("Content-Type: text/xml");
print $dom->saveXML();

1 answer

0


First remove the parameter $nomeArquivo and the condition that is within the function, because if the file exists or will not execute the same code, then why repeat ?

function addMensagem($documento, $mensagem, $cpf_origem) {
    // criar msg
    $msg = $documento->createElement("msg");
    // criar nó data
    $data = date('j/n/Y H:i:s');
    $dataElm = $documento->createElement("data_envio", $data);
    // criar nó origem
    $cpf_origemElm = $documento->createElement("cpf_origem", $cpf_origem);
    // criar nó mensagem (texto)
    $mensagemElm = $documento->createElement("mensagem", $mensagem);

    $msg->appendChild($dataElm);
    $msg->appendChild($cpf_origemElm);
    $msg->appendChild($mensagemElm);
    return $msg;
}

now, after instantiating the DOMDocument, checks if the file exists, if yes, load the file using the function DOMDocument::load and retrieve the main node: $dom->documentElement, if no, create a new element:

if ( !file_exists($nomeArquivo) ) {
    // criando nó principal
    $root = $dom->createElement("mensagens");
    // retirar os espaços em branco
    $dom->preserveWhiteSpace = false;
    // gerar código ??
    $dom->formatOutput = true;
} else {
    // carrega o arquivo
    $dom->load( $nomeArquivo );
    // recupera nó principal
    $root = $dom->documentElement;
}

The complete code

date_default_timezone_set('America/Sao_Paulo');

// Nome do arquivo
$nomeArquivo = "mensagens.xml";
// versão do encoding xml
$dom = new DOMDocument("1.0", "ISO-8859-7");

if ( !file_exists($nomeArquivo) ) {
    // criando nó principal
    $root = $dom->createElement("mensagens");
    // retirar os espaços em branco
    $dom->preserveWhiteSpace = false;
    // gerar código ??
    $dom->formatOutput = true;
} else {
    // carrega o arquivo
    $dom->load( $nomeArquivo );
    // recupera nó principal
    $root = $dom->documentElement;
}
$msg = addMensagem($dom, "Teste2", "12345678911");
// adicionando ao root
$root->appendChild($msg);
$dom->appendChild($root);

// salva o arquivo
$dom->save($nomeArquivo);

// mostrar
header("Content-Type: text/xml");
print $dom->saveXML();

function addMensagem($documento, $mensagem, $cpf_origem) {
    // criar msg
    $msg = $documento->createElement("msg");
    // criar nó data
    $data = date('j/n/Y H:i:s');
    $dataElm = $documento->createElement("data_envio", $data);
    // criar nó origem
    $cpf_origemElm = $documento->createElement("cpf_origem", $cpf_origem);
    // criar nó mensagem (texto)
    $mensagemElm = $documento->createElement("mensagem", $mensagem);

    $msg->appendChild($dataElm);
    $msg->appendChild($cpf_origemElm);
    $msg->appendChild($mensagemElm);
    return $msg;
}
  • It worked fine, thank you very much for your help!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.