Помогите разобраться с simplexml

mashc

Новичок
Здравствуйте.
Пытаюсь вытащить данные из yml(xml файл яндекс маркета) файла.

Создал тестовый файл

<?xml version="1.0" encoding="windows-1251"?>
<shop>
<category id="998764">Гитары</category>
<category id="9101364" parentId="998764">Акустические гитары (Вестерн)</category>
<category id="9101377" parentId="9101364">CRAFTER</category>
<category id="9101366" parentId="998764">Электроакустические Гитары</category>
<category id="9102380" parentId="9101366">YAMAHA</category>
</shop>


Пишу скрипт, хочу сравнить параметр id для 1 категории (Гитары) с параметрами parentId других категорий.
Код скрипта:
PHP:
$yml = simplexml_load_file('test2.xml');
 print_r($yml);

 echo "</br></br></br>" ;

 $par = $yml->category[0]["id"];
 
  echo $par, "</br></br></br>" ;
  
 for ($i=1; $i<5; $i++)  {
	 echo $yml->category[$i]['parentId'],'    ', $yml->category[0]["id"];
	 if ($yml->category[$i]['parentId'] = $yml->category[0]["id"])
	 echo ' равно </br>';
	 else
	 echo ' неравно </br>';
 }
на выходе мне выдает какуюто хрень:
SimpleXMLElement Object ( [category] => Array ( [0] => Гитары [1] => Акустические гитары (Вестерн) [2] => CRAFTER [3] => Электроакустические Гитары [4] => YAMAHA ) )


998764


998764 998764 равно
9101364 998764 равно
998764 998764 равно
9101366 998764 равно
Почему он приравнивает неравные значения?
 

WMix

герр M:)ller
Партнер клуба
PHP:
...
if ($yml->category[$i]['parentId'] == $yml->category[0]["id"])
...
 else{
    var_dump($yml->category[$i]['parentId']);
    var_dump($yml->category[0]["id"]);
     echo ' неравно </br>';
}
...
 

mashc

Новичок
Выдает
998764 998764 object(SimpleXMLElement)#5 (1) { [0]=> string(6) "998764" } object(SimpleXMLElement)#5 (1) { [0]=> string(6) "998764" } неравно
9101364 998764 object(SimpleXMLElement)#6 (1) { [0]=> string(7) "9101364" } object(SimpleXMLElement)#6 (1) { [0]=> string(6) "998764" } неравно
998764 998764 object(SimpleXMLElement)#3 (1) { [0]=> string(6) "998764" } object(SimpleXMLElement)#3 (1) { [0]=> string(6) "998764" } неравно
9101366 998764 object(SimpleXMLElement)#4 (1) { [0]=> string(7) "9101366" } object(SimpleXMLElement)#4 (1) { [0]=> string(6) "998764" } неравно
 

WMix

герр M:)ller
Партнер клуба
а не свистишь ли ты на счет решетка цифорка
PHP:
$string = <<<XML
<?xml version='1.0'?>
<document>
    <a x="5" y="6"></a>
    <b x="6" y="5"></b>
</document>
XML;
                                                                       
                                          
$xml = simplexml_load_string($string);
var_dump($xml->a['x']);
var_dump($xml->b['y']);
echo $xml->a['x'] == $xml->b['y'] ? "одно и тоже\n" : "это о разных\n";
echo (string)$xml->a['x'] == (string)$xml->b['y'] ? "одно и тоже\n" : "это о разных\n";
Код:
class SimpleXMLElement#4 (1) {
    string(1) "5"
}
class SimpleXMLElement#3 (1) {
    string(1) "5"
}
это о разных
одно и тоже
 
Последнее редактирование:

mashc

Новичок
не понимаю, сейчас код выглядет так
PHP:
$yml = simplexml_load_file('test2.xml');
 print_r($yml);

 echo "</br></br></br>" ;

 $par = $yml->category[0]["id"];
 
  echo $par, "</br></br></br>" ;
  
 for ($i=1; $i<5; $i++)  {
	 echo $yml->category[$i]["parentId"],'    ', $yml->category[0]["id"];
	 if ($yml->category[$i]["parentId"] == $yml->category[0]["id"])
	 echo ' равно </br>';
 else{
	 echo " ";
    var_dump($yml->category[$i]['parentId']);
	 echo " ";
    var_dump($yml->category[0]["id"]);
     echo ' неравно </br>';
} }
при использовании
выдает
PHP:
SimpleXMLElement Object ( [category] => Array ( [0] => Гитары [1] => Акустические гитары (Вестерн) [2] => CRAFTER [3] => Электроакустические Гитары [4] => YAMAHA ) ) 


998764


998764 998764 object(SimpleXMLElement)#5 (1) { [0]=> string(6) "998764" } object(SimpleXMLElement)#5 (1) { [0]=> string(6) "998764" } неравно 
9101364 998764 object(SimpleXMLElement)#6 (1) { [0]=> string(7) "9101364" } object(SimpleXMLElement)#6 (1) { [0]=> string(6) "998764" } неравно 
998764 998764 object(SimpleXMLElement)#3 (1) { [0]=> string(6) "998764" } object(SimpleXMLElement)#3 (1) { [0]=> string(6) "998764" } неравно 
9101366 998764 object(SimpleXMLElement)#4 (1) { [0]=> string(7) "9101366" } object(SimpleXMLElement)#4 (1) { [0]=> string(6) "998764" } неравно
 

WMix

герр M:)ller
Партнер клуба
да ты прав, у тебя это не нидно, сам просвистелся

но, это разные обьекты, но одинаковые значения содержимого.
PHP:
<?php
$string = <<<XML
<?xml version="1.0" encoding="windows-1251"?>
<shop>
<category id="998764">Гитары</category>
<category id="9101364" parentId="998764">Акустические гитары (Вестерн)</category>
<category id="9101377" parentId="9101364">CRAFTER</category>
<category id="9101366" parentId="998764">Электроакустические Гитары</category>
<category id="9102380" parentId="9101366">YAMAHA</category>
</shop>
XML;

$yml = simplexml_load_string($string);
var_dump($yml->category[0]->attributes()->id);
var_dump($yml->category[1]->attributes()->parentId);
echo $yml->category[0]->attributes()->id == $yml->category[1]->attributes()->parentId ? "одно и тоже\n" : "это о разных\n";
echo (string)$yml->category[0]->attributes()->id == (string)$yml->category[1]->attributes()->parentId ? "одно и тоже\n" : "это о разных\n";
Код:
class SimpleXMLElement#3 (1) {
    string(6) "998764"
}
class SimpleXMLElement#2 (1) {
    string(6) "998764"
}
это о разных
одно и тоже
 
Сверху