xmlreader 多节点 php,使用XMLReader和PHP获取大XML文件中的子树数据

我试图使用XMLReader读取一个大的XML文件,但找不到正确循环子树的方法。

到目前为止,我尝试使用read()和next()函数。而且工作不正常。下面是我正在分析的XML结构:

10

Pedro

16/09/2015

Ativo

(21) 96909-6905

Celular

11

Luiz

16/09/2015

Ativo

(21) 96909-6901

Celular

如您所见,节点TELEFONE可以有多个TELEFONE节点。所以我需要把它们单独循环起来。到目前为止,这是我的代码:

$xml = new XMLReader();

$xml->open('xml_formatado_stack.xml');

$cont = 0;

$clientes = array();

while ($xml->read()) {

if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'CLIENTES') {

while ($xml->read()) {

if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'CLIENTE') {

while ($xml->read()) {

$telefone = array();

if($xml->nodeType == XMLReader::ELEMENT) {

if($xml->localName == 'CODIGO_INTERESSADO') {

$xml->read();

echo $xml->value."
";

$clientes[$cont]['codigo_interessado'] = $xml->value;

}

if($xml->localName == 'NOME_INTERESSADO') {

$xml->read();

$clientes[$cont]['nome_interessado'] = $xml->value;

}

if($xml->localName == 'ENDERECO') {

$xml->read();

$clientes[$cont]['endereco'] = $xml->value;

}

if($xml->localName == 'COMPLEMENTO') {

$xml->read();

$clientes[$cont]['complemento'] = $xml->value;

}

if($xml->localName == 'ESTADO') {

$xml->read();

$clientes[$cont]['estado'] = $xml->value;

}

if($xml->localName == 'MUNICIPIO') {

$xml->read();

$clientes[$cont]['municipio'] = $xml->value;

}

if($xml->localName == 'BAIRRO') {

$xml->read();

$clientes[$cont]['bairro'] = $xml->value;

}

if($xml->localName == 'CEP') {

$xml->read();

$clientes[$cont]['cep'] = $xml->value;

}

if($xml->localName == 'DATA_CADASTRO') {

$xml->read();

$clientes[$cont]['data_cadastro'] = $xml->value;

}

if($xml->localName == 'STATUS') {

$xml->read();

$clientes[$cont]['status'] = $xml->value;

}

if ($xml->localName == 'TELEFONES') {

while ($xml->read()) {

if ($xml->nodeType == XMLReader::ELEMENT && $xml->localName == 'TELEFONE') {

while ($xml->read()) {

if($xml->nodeType == XMLReader::ELEMENT) {

if($xml->localName == 'NUMERO') {

$xml->read();

$telefone['numero'] = $xml->value;

}

if($xml->localName == 'TIPO') {

$xml->read();

$telefone['tipo'] = $xml->value;

}

}

}

}

}

$clientes[$cont]['telefones'][] = $telefone;

$cont++;

}

}

}

}

}

}

}

var_dump($clientes);

$xml->close();

我这里有两个问题。首先,我的最后一个数组只有一个客户节点的信息。它应该有所有的客户节点,我用$CONT VAR对它们进行索引。

另一个问题是,我的$clientes数组中的TELEFONES节点属于XML的最后一个CLIENTE节点。所以,不知怎么的,我的代码会遍历每个客户节点,但是当我处理TELEFONES节点时,我的$clientes数组会变得一团糟。

我只是找不到使用XMLParser循环子树的方法。有人能帮我吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值