Мне нужно проанализировать этот XML-файл, который имеет несколько пользовательских тегов, как показано здесь:
<?xml version="1.0" encoding="utf-8"?>
<glz:Config xmlns:glz="http://www.glizy.org/dtd/1.0/">
<glz:Import src="config.xml" />
<glz:Group name="thumbnail">
<glz:Param name="width" value="200" />
<glz:Param name="height" value="*" />
</glz:Group>
</glz:Config>
Когда он попадает в тег <glz:Import src="config.xml" />
, ему нужно проанализировать файл config.xml , который содержит следующее:
<?xml version="1.0" encoding="utf-8"?>
<glz:Config xmlns:glz="http://www.glizy.org/dtd/1.0/">
<glz:Group name="folder">
<glz:Param name="width" value="100" />
<glz:Param name="height" value="200" />
</glz:Group>
</glz:Config>
Окончательный результат должен быть таким массивом, как этот.Он содержит значения обоих проанализированных файлов:
$result['thumbnail/width'] = 200;
$result['thumbnail/height'] = '*';
$result['folder/width'] = 100;
$result['folder/height'] = 200;
Так я справился с разбором XML.Моя проблема в том, что я не знаю, как объединить новые результаты с уже (старыми) проанализированными.Здесь вы можете увидеть мой код:
function parseFile(){
$reader = new XMLReader;
$reader->open($this->fileName);
while ($reader->read()){
if ($reader->name == 'glz:Group')
{
$groupName = $reader->getAttribute('name');
$reader->read();
$reader->read();
while ($reader->name == 'glz:Param')
{
if (strpos($reader->getAttribute('name'),'[]') == true)
{
$arrayGroupName = substr($reader->getAttribute('name'), 0, -2);
if(empty($filters[$groupName.'/'.$arrayGroupName]))
{
$filters[$groupName.'/'.$arrayGroupName] = array();
array_push($filters[$groupName.'/'.$arrayGroupName],$this->castValue($reader->getAttribute('value')));
$this->result[$groupName."/".$arrayGroupName] = $filters[$groupName.'/'.$arrayGroupName];
}
else
{
array_push($filters[$groupName.'/'.$arrayGroupName],$this->castValue($reader->getAttribute('value')));
$this->result[$groupName."/".$arrayGroupName] = $filters[$groupName.'/'.$arrayGroupName];
}
}
else
{
$this->result[$groupName."/".$reader->getAttribute('name')] = $this->castValue($reader->getAttribute('value'));
}
$reader->read();
$reader->read();
}
}
else if ($reader->name == 'glz:Param')
{
if (strpos($reader->getAttribute('name'),'[]') == true)
{
$arrayGroupName = substr($reader->getAttribute('name'), 0, -2);
if(empty($filters[$arrayGroupName]))
{
$filters[$arrayGroupName] = array();
array_push($filters[$arrayGroupName],$this->castValue($reader->getAttribute('value')));
$this->result[$$arrayGroupName] = $filters[$arrayGroupName];
}
else
{
array_push($filters[$arrayGroupName],$this->castValue($reader->getAttribute('value')));
$this->result[$arrayGroupName] = $filters[$arrayGroupName];
}
}
else
{
$this->result[$reader->getAttribute('name')] = $this->castValue($reader->getAttribute('value'));
}
}
else if ($reader->name == 'glz:Import')
{
$file = $reader->getAttribute('src');
$newConfig = new Config($file);
$newConfig->parseFile();
}
}
return $this->result;
}
Как я могу объединять, каждый раз, результат, который я получаю при разборе файла, когда нахожу тег ?
Спасибовы так много!