我一直在尝试使用SimpleXMLReader
从以下XML结构中检索数据:
<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>
但我只能检索并回显“num”节点的值。 就像这个结果我得到这样的东西:
/boutique/produto: 228122907 = 0;
/boutique/produto: 285823820 = 0;
/boutique/produto: 285823824 = 0;
/boutique/produto: 285823825 = 0;
/boutique/produto: 285823826 = 0;
/boutique/produto: 285823827 = 0;
我改变什么并不重要,例如,我似乎无法获得节点<nome>
值。
我正在使用这个软件,因为我正在处理一个非常大的XML文件。
在此处下载XML:http://v2.afilio.com.br/aff/aff_get_boutique.php?boutiqueid=37930-895987&token=53e355b0a09ea0.74300807&progid=1010&format=XML
在此处获取SimpleXMLReader:https://github.com/dkrnl/SimpleXMLReader
我的代码如下:
<?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();