Что-то совсем не парсится:(((

Tsep

Guest
Что-то совсем не парсится:(((

Взля пример, который работает! Поменял названия нод и сам xml - перестало парситься:(((( Сижу и не могу понять почему. Может кто взглянет свежим взглядом что тут не так?
<root>
<item>
<artikel>11060100</artikel>
<typeart>Туфли</typeart>
<vidart>Женские</vidart>
<mat>Кожа</mat>
<color>Черный</color>
<podkl>Кожа натурал.</podkl>
<foto>11060100</foto>
<rostovka>39.00 - 47.00</rostovka>
</item>
<item>
<artikel>11080100</artikel>
<typeart>Туфли</typeart>
<vidart>Женские</vidart>
<mat>Пул-ап</mat>
<color>Голубой</color>
<podkl>Кожа натурал.</podkl>
<foto>11080100</foto>
<rostovka>39.00 - 47.00</rostovka>
</item>
</root>

<?
$file = "Test2.xml";
$x_artikel = array();
$x_typeart = array();
$x_vidart = array();
$x_mat = array();
$x_color = array();
$x_podkl = array();
$x_foto = array();
$x_rostovka = array();

function startElement($parser, $name, $attrs) // функция обработки открывающего тега
{
global $nname, $opentag;
$opentag=true;
$nname=$name;
}//startElement

function endElement($parser, $name) // функция обработки закрывающего тега
{
global $opentag;
$opentag=false;
}//endElement


function CharacterData($parser, $data) // функция обработки данных
{
global $nname, $n, $a, $opentag, $x_artikel, $x_typeart, $x_vidart, $x_mat, $x_color, $x_podkl, $x_foto, $x_rostovka;

if ($nname == "artikel" and $opentag ) { $x_artikel[] = $data;};
if ($nname == "typeart" and $opentag) { $x_typeart[] = $data;};
if ($nname == "vidart" and $opentag) { $x_vidart[] = $data;};
if ($nname == "mat" and $opentag) { $x_mat[] = $data;};
if ($nname == "color" and $opentag) { $x_color[] = $data;};
if ($nname == "podkl" and $opentag) { $x_podkl[] = $data;};
if ($nname == "foto" and $opentag) { $x_foto[] = $data;};
if ($nname == "rostovka" and $opentag) { $x_rostovka[] = $data;};
}//CharacterData

$xml_parser = xml_parser_create(); // создание обработчика событий
xml_set_element_handler($xml_parser, "startElement", "endElement"); // установка функций обработки
xml_set_character_data_handler($xml_parser, "CharacterData" ); // начального, конечного тега и данных

if (!($fp = fopen($file, "r")))
{
die("could not open XML input");
}//if

while ($data = fread($fp, 800000))
{
xml_parse($xml_parser, $data);
}//while

for ($i=0;$i<count($x_artikel);$i++)
{
print ($x_artikel[$i])."<BR>";
print ($x_vidart[$i])."<BR>";
print ($x_mat[$i])."<BR>";
print ($x_color[$i])."<BR>";
print ($x_typeart[$i])."<BR>";
print ($x_podkl[$i])."<BR>";
print ($x_foto[$i])."<BR>";
print ($x_rostovka[$i])."<BR><BR>";
}//for
?>
 

sokov

Guest
Re: Что-то совсем не парсится:(((

"Не парсится" - это как? В чём проблема - поконкретнее можно?
 

Tsep

Guest
вообще ничего не выдает:(
должны выводится элементы: print ($x_artikel[$i])."<BR>";.....

вот работающий пример:

<ROOT>
<ITEM>
<ID>1</ID>
<NAME>foot1</NAME>
<N1>N1111111@"</N1>
<N2>N2222222"#</N2>
<N3>N3333333$"</N3>
</ITEM>

<ITEM>
<ID>2</ID>
<NAME>foot1</NAME>
<N1>N1111111@"</N1>
<N2>N2222222"#</N2>
<N3>N3333333$"</N3>
</ITEM>
</ROOT>

<?
echo date ("h:i:s");
$file = "data.xml";
$x_id = array();
$x_name = array();
$x_n1 = array();
$x_n2 = array();
$x_n3 = array();

function startElement($parser, $name, $attrs) // функция обработки открывающего тега
{
global $nname, $opentag;
$opentag=true;
$nname=$name;
}//startElement

function endElement($parser, $name) // функция обработки закрывающего тега
{
global $opentag;
$opentag=false;
}//endElement


function CharacterData($parser, $data) // функция обработки данных
{
global $nname, $n, $a, $opentag, $x_id, $x_name, $x_n1, $x_n2, $x_n3;
if ($nname == "ID" and $opentag ) { $x_id[] = $data;};
if ($nname == "NAME" and $opentag) { $x_name[] = $data;};
if ($nname == "N1" and $opentag) { $x_n1[] = $data;};
if ($nname == "N2" and $opentag) { $x_n2[] = $data;};
if ($nname == "N3" and $opentag) { $x_n3[] = $data;};
}

$xml_parser = xml_parser_create(); // создание обработчика событий
xml_set_element_handler($xml_parser, "startElement", "endElement"); // установка функций обработки
xml_set_character_data_handler($xml_parser, "CharacterData" ); // начального, конечного тега и данных

if (!($fp = fopen($file, "r")))
{
die("could not open XML input");
}//if

while ($data = fread($fp, 800000))
{
xml_parse($xml_parser, $data);
}//while

for ($i=0;$i<count($x_name);$i++){
print ($x_id[$i])."<BR>";
print ($x_n1[$i])."<BR>";
print ($x_n2[$i])."<BR>";
print ($x_n3[$i])."<BR>";
print ($x_name[$i])."<BR><BR>";
}
echo date ("h:i:s");
?>

Кажется все тоже, только поменял названия элементов.
 

sokov

Guest
Sablotron по умолчанию автоматически приводит названия узлов к верхнему регистру, т.е. тебе надо писать

if($nname == "ARTIKEL" and $opentag ) {
$x_artikel[] = $data;
}
 

Tsep

Guest
СПАСИБО! ЗАРАБОТАЛО!
Я уже начал верить в происки матрицы:) А оказалось что все дело в умном саблотроне:)
 
Сверху