Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос по тегу
Форумы портала PHP.SU » » XML и его обработка » Вопрос по тегу

Страниц (1): [1]
 

1. eFusion - 25 Июля, 2013 - 13:16:09 - перейти к сообщению
Всем привет!
Есть xml:
...
<category ID="19944" parentID="21010">GENIUS</category>
<category ID="29248" parentID="00077">SHARP</category>
<category ID="20183" parentID="20945">4U</category>
<category ID="19562" parentID="20939">HEWLETT PACKARD</category>
...
Возможно ли вытащить ID="19944" parentID="21010" из каждого тега <category>?
2. esterio - 25 Июля, 2013 - 13:18:13 - перейти к сообщению
3. eFusion - 25 Июля, 2013 - 13:24:03 - перейти к сообщению
Я понимаю, что simplexml:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $xml = simplexml_load_file('news.xml');
  3. $categories = $xml->categories->category;
  4. ?>
  5. <html xml:lang="en" lang="en">
  6. <head>
  7.         <title>Parse</title>
  8. </head>
  9. <body>
  10.  
  11. <h2><?php echo $categories; ?></h2>
  12.  
  13. <?php
  14. foreach ($xml->categories->category as $category) {
  15.         echo "<h3>".$category."</h3>";
  16. }
  17. ?>
  18. </body>
  19. </html>

И даже нашел ф-цию simplexml_load_string, но вопрос, я в цикле перебираю категории а еще и нужно перебирать аттрибуты. Как это в одном цикле реализовать?
4. OrmaJever - 25 Июля, 2013 - 13:29:28 - перейти к сообщению
напишите сюда что показывает
5. eFusion - 25 Июля, 2013 - 13:33:19 - перейти к сообщению
object(SimpleXMLElement)#1 (5) { ["categories"]=> object(SimpleXMLElement)#2 (1) { ["category"]=> array(1500) { [0]=> string(5) "MITAC" [1]=> string(7) "DIGITAL" [2]=> string(27) "Швейные машины" [3]=> string(73) "Аксессуары и чехлы для электронных книг" [4]=> string(44) "Для матричных принтеров" [5]=> string(6) "GARMIN" [6]=> string(71) "Дополнительные порты (IDE, SATA, IEEE1394, LPT, COM)" [7]=> string(10) "REAL POWER" [8]=> string(7) "MYSTERY" [9]=> string(27) "DVD-RAM, DVD-R/RW, DVD+R/RW" [10]=> string(20) "Клавиатуры" [11]=> string(7) "PHILIPS" [12]=> string(58) "Портативные рации и аксессуары"
а далее огромное кол-во такого же
6. soffrick - 25 Июля, 2013 - 13:45:57 - перейти к сообщению
eFusion
самому то хоть читабельно?
(Добавление)
каша пишет:
Спойлер (Отобразить)

Цитата:
Спойлер (Отобразить)



в php оберни, чтоб отступы тоже были Улыбка
7. eFusion - 25 Июля, 2013 - 13:56:23 - перейти к сообщению
Согласен:
CODE (htmlphp):
скопировать код в буфер обмена
  1. [spoiler]object(SimpleXMLElement)#1 (5) {
  2.  ["categories"]=>
  3.   object(SimpleXMLElement)#2 (1) {
  4.    ["category"]=>
  5.     array(1500) {
  6.       [0]=>
  7.       string(5) "MITAC"
  8.       [1]=>
  9.       string(7) "DIGITAL"
  10.       [2]=>
  11.       string(27) "Швейные машины"
  12.       [3]=>
  13.       string(73) "Аксессуары и чехлы для электронных книг"
  14.       [4]=>
  15.       string(44) "Для матричных принтеров"
  16.       [5]=>
  17.       string(6) "GARMIN"
  18.       [6]=>
  19.       string(71) "Дополнительные порты (IDE, SATA, IEEE1394, LPT, COM)"
  20.       [7]=>
  21.       string(10) "REAL POWER"
  22.       [8]=>
  23.       string(7) "MYSTERY"
  24.       [9]=>
  25.       string(27) "DVD-RAM, DVD-R/RW, DVD+R/RW"
  26.       [10]=>
  27.       string(20) "Клавиатуры"[/spoiler]

(Добавление)
Если взять такой кусок xml:
<typicen>
<typcen ID="A000000001"> Розница</typcen>
<typcen ID="A000000002"> Мелкий опт</typcen>
<typcen ID="A000000003"> Крупный опт</typcen>
<typcen ID="A000000004"> Альтернатива</typcen>
</typicen>

Вытащить id не выходит:
PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2. $xml = simplexml_load_file('news.xml');
  3. $categories = $xml->categories->category;
  4. ?>
  5. <html xml:lang="en" lang="en">
  6. <head>
  7.         <title>Parse</title>
  8. </head>
  9. <body>
  10.  
  11. <?PHP
  12. foreach ($xml->typicen->typcen as $typcen) {
  13.         $xmlString = simplexml_load_string($xml);
  14.         foreach ($xmlString->typcen[0]->attributes() as $idTypeCen) {
  15.                 echo "<h3>".$typcen.$idTypeCen."</h3>";
  16.         }
  17. }
  18. ?>
  19. </body>
  20. </html>

Где накосячил?
(Добавление)
Ну пните куда-нить - помощь нужна ваша
8. VenZell - 25 Июля, 2013 - 15:47:47 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function findAttribute($xml, $tag, $attribute) {
  2.     if (!isset($xml) || !isset($tag) || !isset($attribute)) {
  3.         return false; //"Функции переданы не все параметры";
  4.     }    
  5.     $all_items = $xml->xpath('//' . $tag);
  6.     $items_total = count($all_items);
  7.     if ($items_total > 0) {
  8.         $i = 1;
  9.         foreach ($all_items as $item) {
  10.             $item_attributes = $item->attributes();
  11.             $subject = (string) $item_attributes[$attribute];
  12.             if (!empty($subject)) {
  13.                 $result[$i] = $subject;
  14.             }
  15.             ++$i;
  16.         }
  17.     } else {
  18.         return false; //"Во входном файле не найден тег {$tag}";
  19.     }
  20.     return isset($result) ? $result : false;
  21. }
  22.  
  23. $xml = simplexml_load_file('news.xml');
  24. $id = findAttribute($xml, 'category', 'ID'); //Все значения ID
  25. $parent_id = findAttribute($xml, 'category', 'parentID'); //Все значения parentID
9. eFusion - 25 Июля, 2013 - 15:56:52 - перейти к сообщению
Спасибо большое! Буду допиливать дальше сам

 

Powered by ExBB FM 1.0 RC1