Error Sitaxe PHP query in XML

Asked

Viewed 33 times

-1

Hello,

I’m looking for a solution to query information within an XML, I found a tutorial on the internet, but the code is with an error that I can not solve.

The code is this:

<?php
# Carrega e armazena o XML na variavel $xml
$xml = simplexml_load_file(“estante.xml”);
# laço dentro da tag livro para cada tag livro que encontrar
foreach($xml->xpath(‘//livro‘) as $livro)
{
    # armazena na var $registro o conteudo de uma tag livro
    $registro = simplexml_load_string($livro->asXML());
    # executa uma consulta XPath e armazena em $busca
$busca = $registro->xpath(‘//preco[.>55.00]‘);
# verificando se houve alguma busca com sucesso
    if($busca){
# exibindo os resultados encontrados
echo $livro->titulo . “<br>”;
echo $livro->descricao . “<br>”;
echo $livro->preco . “<br><br>”;
    }
}
?>

The XML he queries is this:

<?xml version=”1.0″ encoding=”iso-8859-1″?>
<livros>
<livro>
<cod>01</cod>
<titulo>PHP para iniciantes</titulo>
<descricao>Desenvolvendo Aplicações web</descricao>
<autor>Manuel da Silva</autor>
<paginas>200</paginas>
<preco>50.00</preco>
</livro>
<livro>
<cod>02</cod>
<titulo>XML</titulo>
<descricao>Usando XML com PHP </descricao>
<autor>José das Couves</autor>
<paginas>100</paginas>
<preco>150.00</preco>
</livro>
<livro>
<cod>03</cod>
<titulo>Javascript</titulo>
<descricao>O Poder do javascript</descricao>
<autor>Billy Borny</autor>
<paginas>80</paginas>
<preco>90.90</preco>
</livro>
</livros>

The error I receive as return is an error on Line 6 with this information:

[19-Feb-2019 15:22:22 UTC] PHP Parse error:  syntax error, unexpected '{', expecting ',' or ')' in /home3/smarts43/public_html/app/index.php on line 6

I believe it should be a simple mistake, if someone has a light to help me, I have already followed the guidelines that it returns, but the error persists.

Thank you,

  • 1

    I did not understand the purpose of the two bars in the line of the foreach? Is that how your code is? If it is, you’re opening parentheses, and you’re not closing because the rest of the line is commented.

2 answers

2

From what I understand, you need to take a better look at PHP, what caused all the error were these different double quotes, was just swap for normal quotes and uncomment the foreach line as I had asked you in the comment. test like this:

<?php
# Carrega e armazena o XML na variavel $xml
$xml = simplexml_load_file('estante.xml');
# laço dentro da tag livro para cada tag livro que encontrar
foreach($xml->xpath('livro') as $livro)
{
    # armazena na var $registro o conteudo de uma tag livro
    $registro = simplexml_load_string($livro->asXML());
    # executa uma consulta XPath e armazena em $busca
$busca = $registro->xpath('preco[.>55.00]');
# verificando se houve alguma busca com sucesso
    if($busca){
# exibindo os resultados encontrados
echo $livro->titulo . "<br>";
echo $livro->descricao . "<br>";
echo $livro->preco . "<br><br>";
    }
}
?>

bookcase.php

<?xml version="1.0" encoding="iso-8859-1"?>
<livros>
    <livro>
        <cod>01</cod>
        <titulo>PHP para iniciantes</titulo>
        <descricao>Desenvolvendo Aplicações web</descricao>
        <autor>Manuel da Silva</autor>
        <paginas>200</paginas>
        <preco>50.00</preco>
    </livro>
    <livro>
        <cod>02</cod>
        <titulo>XML</titulo>
        <descricao>Usando XML com PHP </descricao>
        <autor>José das Couves</autor>
        <paginas>100</paginas>
        <preco>150.00</preco>
    </livro>
    <livro>
        <cod>03</cod>
        <titulo>Javascript</titulo>
        <descricao>O Poder do javascript</descricao>
        <autor>Billy Borny</autor>
        <paginas>80</paginas>
        <preco>90.90</preco>
    </livro>
</livros>

1


You see, there are 2 points in your PHP code that are commented.


...
foreach($xml->xpath(‘//livro‘) as $livro)
{
...

And

...
$busca = $registro->xpath(‘//preco[.>55.00]‘);
...

The error in question is quite intuitive.

[19-Feb-2019 15:22:22 UTC] PHP Parse error: syntax error, Unexpected '{', expecting ',' or ')' in /home3/smarts43/public_html/app/index.php on line 6

You must pay attention to the mistakes because after all he is informing you that he "expected" a , (possible other parameter) or ) (the closure of the foreach).

In your case just remove comments from the code this error will be remedied.

...
foreach($xml->xpath('livro') as $livro)
{
...
$busca = $registro->xpath('preco[.>55.00]');
...

EDIT:

Code working:

PHP

<?php

# Carrega e armazena o XML na variavel $xml
$xml = simplexml_load_file("teste.xml");
# laço dentro da tag livro para cada tag livro que encontrar
foreach($xml->xpath('livro') as $livro)
{
    # armazena na var $registro o conteudo de uma tag livro
    $registro = simplexml_load_string($livro->asXML());
    # executa uma consulta XPath e armazena em $busca
    $busca = $registro->xpath("preco[.>55.00]");
    # verificando se houve alguma busca com sucesso

    if($busca){
        # exibindo os resultados encontrados
        echo $livro->titulo . '<br>';
        echo $livro->descricao . '<br>';
        echo $livro->preco . '<br><br>';
    }
}
?>

XML

<?xml version="1.0" encoding="iso-8859-1"?>
<livros>
<livro>
<cod>01</cod>
<titulo>PHP para iniciantes</titulo>
<descricao>Desenvolvendo Aplicações web</descricao>
<autor>Manuel da Silva</autor>
<paginas>200</paginas>
<preco>50.00</preco>
</livro>
<livro>
<cod>02</cod>
<titulo>XML</titulo>
<descricao>Usando XML com PHP </descricao>
<autor>José das Couves</autor>
<paginas>100</paginas>
<preco>150.00</preco>
</livro>
<livro>
<cod>03</cod>
<titulo>Javascript</titulo>
<descricao>O Poder do javascript</descricao>
<autor>Billy Borny</autor>
<paginas>80</paginas>
<preco>90.90</preco>
</livro>
</livros>

I hope I’ve helped.

  • I did what you said and another mistake came up here, now you say you didn’t expect "." on line 10. $search = $record->xpath(, huh[.>55.00], huh); I switched single quotes for doubles Now an error appears on line 14 Parse error: syntax error, Unexpected '>' in /home/Storage/1/C3/74/rensz1/public_html/imagemsite/testesmart/books.php on line 14 Line 14 is this: echo $book->title . "<br>";

  • I edited the question, the problem is that you copied from somewhere and took along some special characters, made some changes and ran here, it worked.

  • 1

    Thanks @8bit, solved my problem here! Thank you very much

Browser other questions tagged

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