хранить несколько значений тега XML-файла в массиве через xpath

Возможный дубликат:
   Получить специальный тег со значением атрибута из xml

У меня есть XML-файл, например:

<?xml version="1.0" encoding="UTF-8"?>

    
        
            
                580005000000187001
                
                
                
                
                580005000000088096
                
                580005000000052003
                
                580005000000052003
                
                580005000000052003
                
                
                
                
                
                
                
                
                    
                        580005000000171125
                        
                        10.0
                        20.0
                        0.0
                        200.0
                        0.0
                        200.0
                        10.0
                        200.0
                        0.0
                        
                    
                    
                        580005000000171131
                        
                        25.0
                        1.0
                        0.0
                        50.0
                        1.23
                        23.77
                        25.0
                        48.77
                        0.0
                        
                    
                
                
                
                
            
            
                580005000000134001
                
                
                580005000000120009
                
                
                
                
                
                580005000000088100
                
                580005000000052003
                
                580005000000052003
                
                580005000000052003
                
                
                
                
                
                
                
                
                    
                        580005000000059016
                        
                        14.95
                        1.0
                        -25.0
                        45.0
                        0.0
                        45.0
                        45.0
                        45.0
                        0.0
                        
                    
                
                
            
            
                580005000000118001
                
                
                580005000000069001
                
                
                
                
                
                
                580005000000088090
                
                580005000000052003
                
                580005000000052003
                
                580005000000052003
                
                
                
                
                
                
                
                
                    
                        580005000000059016
                        
                        14.95
                        24.0
                        -25.0
                        1080.0
                        0.0
                        1080.0
                        45.0
                        1080.0
                        0.0
                        
                    
                
                
            
            
                580005000000070009
                
                
                580005000000070003
                
                
                
                
                
                580005000000058001
                
                580005000000052003
                
                580005000000052003
                
                580005000000052003
                
                
                
                
                
                
                
                
                    
                        580005000000059032
                        
                        10.0
                        441.0
                        -882.0
                        4410.0
                        0.0
                        4410.0
                        10.0
                        4410.0
                        0.0
                        
                    
                    
                        580005000000059022
                        
                        15.0
                        122.0
                        -122.0
                        1464.0
                        0.0
                        1464.0
                        12.0
                        1464.0
                        0.0
                        
                    
                    
                        580005000000059030
                        
                        10.0
                        1222.0
                        -1222.0
                        14664.0
                        0.0
                        14664.0
                        12.0
                        14664.0
                        0.0
                        
                    
                
                
            
        
    

I need to show the name of the sales order owner name and their associated product name which is stored under of product tag.

Мой код похож:

$file_sales_content = "https://crm.zoho.com/crm/private/xml/SalesOrders/getRecords?authtoken=XXX&scope=crmapi"  
$doc = new DOMDocument();
$doc->loadXML( $file_sales_content );   
$xpath = new DOMXPath( $doc );
$items = $xpath->evaluate( '//FL[@val="Sales Order Owner"]' );
$sales_order_array = array();
for ( $i = 0; $i < $items->length; $i++ ) {
 array_push($sales_order_array,$items->item( $i )->textContent);
}

где $ file_sales_content возвращает вышеуказанный xml.

Но я думаю, что есть какой-то метод быстрого доступа. Если да, пожалуйста, помогите мне.

Заранее спасибо.

2
nl ja de

1 ответы

Я бы предложил настроить свой код следующим образом:

$file_sales_content = "https://crm.zoho.com/crm/private/xml/SalesOrders/getRecords?authtoken=XXX&scope=crmapi"  
$doc = new DOMDocument();
$doc->loadXML( $file_sales_content );   
$xpath = new DOMXPath( $doc );
$items = $xpath->evaluate( '//FL[@val="Sales Order Owner"]' );
$sales_orders = array();
foreach ( $items as $item) {
    $sales_order = array();
    $sales_order['name'] = $item->textContent;

    $products = array();
    $childItems = $xpath->evaluate( '../FL/product/FL[@val = "Product Name"]', $item );
    foreach( $childItems as $productName) {
       $products[] = $productName->textContent;
    }       
    $sales_order['product'] = $products;
    $sales_orders[] = $sales_order;
}
0
добавлено
Да, вам нужно запросить каждый $ childItem , чтобы получить нужные значения. Вы не указали какую-либо информацию о том, какие конкретные значения вы хотите или как вы хотите представлять их в структуре данных, поэтому выше всего я могу предоставить вам информацию, которую вы нам дали.
добавлено автор JLRishe, источник
Спасибо за это разъяснение. Не могли бы вы попробовать мой обновленный ответ?
добавлено автор JLRishe, источник
Виноват. Я забыл, что был дочерним узлом . Надеюсь, теперь исправлено. Не могли бы вы попробовать еще раз?
добавлено автор JLRishe, источник
Я сделал по вашему предложению. Но я не получаю ожидаемого результата. Если я напечатаю массив $ childItems. Он показывает объект DOMNodeList Object() Объект DOMNodeList Object() Объект DOMNodeList Object() Объект DOMNodeList ().
добавлено автор lapis lazuli, источник
Извините за недостаток информации. На самом деле это будет подобно массиву («name» => «xxx», «product» => array («product_name1», «produc & zwnj; t_name2», «product_na & zwnj; me3»)); Я обновляю свой вопрос. Мне нужно только имя владельца и связанное с ним имя продукта.
добавлено автор lapis lazuli, источник
Спасибо за обновление. Позвольте мне проверить, пожалуйста.
добавлено автор lapis lazuli, источник
Если я печатаю финальные $ sales_orders, он показывает Array ([0] => Array ([name] => Adithya Buddhavarapu [product] => Array ()) [1] => Array ([name] => Adithya Buddhavarapu [ product] => Array ()) [2] => Array ([name] => Adithya Buddhavarapu [product] => Array ()) [3] => Array ([name] => Adithya Buddhavarapu [product] => Массив ()))
добавлено автор lapis lazuli, источник
Большое спасибо. Идеально.
добавлено автор lapis lazuli, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp