3
I’ve been using the Simplexmlreader
to try to extract data from the following XML structure:
<boutique>
<produto num="228122907">
<id_produto><![CDATA[70427038]]></id_produto>
<nome><![CDATA[Solução Antirrugas - Kit]]></nome>
<descricao><![CDATA[A melhor combinação do Pegolift com Vitamina C elevada ao extremo e as pluri funções do Pluri-Active. Experimente estes agentes.]]></descricao>
</produto>
</boutique>
But I’m only being able to display the value of the nodule "one" only, getting this result:
/boutique/produto: 228122907 = 0;
/boutique/produto: 285823820 = 0;
/boutique/produto: 285823824 = 0;
/boutique/produto: 285823825 = 0;
/boutique/produto: 285823826 = 0;
/boutique/produto: 285823827 = 0;
No matter what I change, I can’t, for example, extract the value from the node <nome>
.
I am using this software because I am dealing with a very large XML file.
Download the XML file here: http://v2.afilio.com.br/aff/aff_get_boutique.php?boutiqueid=37930-895987&token=53e355b0a09ea0.74300807&progid=1010&format=XML
Download the Simplexmlreader software here: https://github.com/dkrnl/SimpleXMLReader
My code is this:
<?php
header ("Content-type: text/html, charset=utf-8;");
require_once dirname(__FILE__). "/simplexmlreader.php";
class ExampleXmlReader1 extends SimpleXMLReader
{
public function __construct()
{
// by node name
$this->registerCallback("nome", array($this, "callbackPrice"));
// by xpath<br />
///////////////////// Nesta parte não mexe
$this->registerCallback("/boutique/produto", array($this, "callbackRest"));
}
protected function callbackPrice($reader)
{
$xml = $reader->expandSimpleXml();
$attributes = $xml->attributes();
$ref = (string) $attributes->{"num"};
if ($ref) {
$price = floatval((string)$xml);
$xpath = $this->currentXpath();
echo "$xpath: $ref = $price;\n";
}
return true;
}
protected function callbackRest($reader)
{
$xml = $reader->expandSimpleXml();
$attributes = $xml->attributes();
$ref = (string) $attributes->{"num"};
if ($ref) {
$rest = floatval((string) $xml);
$xpath = $this->currentXpath();
echo "$xpath: $ref = $rest;\n";
}
return true;
}
}
echo "<pre>";
$file = dirname(__FILE__) . "/boutique.xml";
$reader = new ExampleXmlReader1;
$reader->open($file);
$reader->parse();
$reader->close();
Try to run a foreach in $xml... from what I understand in the GIT documentation, it is he who returns the nodes in the Simplexmlelement Object format. Has other functions to simplify this process as well.
– Bruno Folle