dj100gr
Новичок
парсинг xml
нужно парсить xml файл, в результате чего получить многомерный массив, использую скрипт из примера в учебнике
function readDatabase($filename)
{
$data = implode("",file($filename));
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$data,$values,$tags);
xml_parser_free($parser);
foreach ($tags as $key=>$val)
{
if ($key == "big")
{
$myr = $val;
for ($i=0; $i < count($myr); $i+=2)
{
$offset = $yr[$i] + 1;
$len = $yr[$i + 1] - $offset;
$tdb[] = parseMyr(array_slice($values, $offset, $len));
}
} else {continue;}
}
return $tdb;
}
function parseMyr($mvalues) {
for ($i=0; $i < count($mvalues); $i++)
$m[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
return $m;
}
при парсинге вот такого файла
<xml>
<big>
<small1>текст1</small1>
<small2>
<s1>текст01</s1>
<s2>текст02</s2>
<s3>текст03</s3>
</small2>
<small3>текст2</small3>
<small4>текст3</small4>
</big>
.....
</xml>
все получается как надо, но вот не хватает мозгов на вот такой
<xml>
<big>
<small1>текст1</small1>
<small2><s>текст</s>текст2</small2>
<small3>текст3</small3>
<small4>текст4</small4>
</big>
.....
</xml>
в данном случае "текст2" скриптом игнорируется, а нужно проигнорировать то что находится в <s>...</s>
нужно парсить xml файл, в результате чего получить многомерный массив, использую скрипт из примера в учебнике
function readDatabase($filename)
{
$data = implode("",file($filename));
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$data,$values,$tags);
xml_parser_free($parser);
foreach ($tags as $key=>$val)
{
if ($key == "big")
{
$myr = $val;
for ($i=0; $i < count($myr); $i+=2)
{
$offset = $yr[$i] + 1;
$len = $yr[$i + 1] - $offset;
$tdb[] = parseMyr(array_slice($values, $offset, $len));
}
} else {continue;}
}
return $tdb;
}
function parseMyr($mvalues) {
for ($i=0; $i < count($mvalues); $i++)
$m[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
return $m;
}
при парсинге вот такого файла
<xml>
<big>
<small1>текст1</small1>
<small2>
<s1>текст01</s1>
<s2>текст02</s2>
<s3>текст03</s3>
</small2>
<small3>текст2</small3>
<small4>текст3</small4>
</big>
.....
</xml>
все получается как надо, но вот не хватает мозгов на вот такой
<xml>
<big>
<small1>текст1</small1>
<small2><s>текст</s>текст2</small2>
<small3>текст3</small3>
<small4>текст4</small4>
</big>
.....
</xml>
в данном случае "текст2" скриптом игнорируется, а нужно проигнорировать то что находится в <s>...</s>