За последние 24 часа нас посетили 22711 программистов и 1041 робот. Сейчас ищут 652 программиста ...

Работа с XML с помощью PHP (xpath)

Тема в разделе "PHP для новичков", создана пользователем fenix_63, 23 июн 2018.

  1. fenix_63

    fenix_63 Активный пользователь

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Тольятти
    Всем привет. Ребят, помогите разобраться

    Есть XML файл, выглядит он вот так (скриншот):

    https://yadi.sk/i/hIxWWrlQ3YJTHt
    Во вложении также есть этот скриншот.
    Помогите, подскажите как из этого XML-документа получить значение узла, где <FL val="Mobile"> ??

    Т.е. мне нужно получить значение 81234567890

    Сейчас вот что у меня есть:
    в $get_data содержится сам XML-файлик
    PHP:
    1. $response = new SimpleXMLElement($get_data);
    2.  
    3. header("Content-type: text/html");
    4.  
    5. $element = $response->xpath('/response/result/Leads/row');
    6.  
    7.  
    8.  
    9. echo '<pre>';
    10. var_dump($element);
    11. echo '</pre>'
    12.  
    13. ;
    В результате на странице появляется вот это:
    Код (Text):
    1. array(1) {
    2.   [0]=>
    3.   object(SimpleXMLElement)#2 (2) {
    4.     ["@attributes"]=>
    5.     array(1) {
    6.       ["no"]=>
    7.       string(1) "1"
    8.     }
    9.     ["FL"]=>
    10.     array(18) {
    11.       [0]=>
    12.       string(19) "3333250000000182013"
    13.       [1]=>
    14.       string(19) "3333250000000157021"
    15.       [2]=>
    16.       object(SimpleXMLElement)#3 (1) {
    17.         ["@attributes"]=>
    18.         array(1) {
    19.           ["val"]=>
    20.           string(10) "Lead Owner"
    21.         }
    22.       }
    23.       [3]=>
    24.       object(SimpleXMLElement)#4 (1) {
    25.         ["@attributes"]=>
    26.         array(1) {
    27.           ["val"]=>
    28.           string(7) "Company"
    29.         }
    30.       }
    31.       [4]=>
    32.       object(SimpleXMLElement)#5 (1) {
    33.         ["@attributes"]=>
    34.         array(1) {
    35.           ["val"]=>
    36.           string(10) "First Name"
    37.         }
    38.       }
    39.       [5]=>
    40.       object(SimpleXMLElement)#6 (1) {
    41.         ["@attributes"]=>
    42.         array(1) {
    43.           ["val"]=>
    44.           string(9) "Last Name"
    45.         }
    46.       }
    47.       [6]=>
    48.       object(SimpleXMLElement)#7 (1) {
    49.         ["@attributes"]=>
    50.         array(1) {
    51.           ["val"]=>
    52.           string(5) "Email"
    53.         }
    54.       }
    55.       [7]=>
    56.       object(SimpleXMLElement)#8 (1) {
    57.         ["@attributes"]=>
    58.         array(1) {
    59.           ["val"]=>
    60.           string(5) "Phone"
    61.         }
    62.       }
    63.       [8]=>
    64.       object(SimpleXMLElement)#9 (1) {
    65.         ["@attributes"]=>
    66.         array(1) {
    67.           ["val"]=>
    68.           string(6) "Mobile"
    69.         }
    70.       }
    71.       [9]=>
    72.       string(19) "3333250000000157021"
    73.       [10]=>
    74.       object(SimpleXMLElement)#10 (1) {
    75.         ["@attributes"]=>
    76.         array(1) {
    77.           ["val"]=>
    78.           string(10) "Created By"
    79.         }
    80.       }
    81.       [11]=>
    82.       string(19) "3333250000000157021"
    83.       [12]=>
    84.       object(SimpleXMLElement)#11 (1) {
    85.         ["@attributes"]=>
    86.         array(1) {
    87.           ["val"]=>
    88.           string(11) "Modified By"
    89.         }
    90.       }
    91.       [13]=>
    92.       object(SimpleXMLElement)#12 (1) {
    93.         ["@attributes"]=>
    94.         array(1) {
    95.           ["val"]=>
    96.           string(12) "Created Time"
    97.         }
    98.       }
    99.       [14]=>
    100.       object(SimpleXMLElement)#13 (1) {
    101.         ["@attributes"]=>
    102.         array(1) {
    103.           ["val"]=>
    104.           string(13) "Modified Time"
    105.         }
    106.       }
    107.       [15]=>
    108.       object(SimpleXMLElement)#14 (1) {
    109.         ["@attributes"]=>
    110.         array(1) {
    111.           ["val"]=>
    112.           string(9) "Full Name"
    113.         }
    114.       }
    115.       [16]=>
    116.       object(SimpleXMLElement)#15 (1) {
    117.         ["@attributes"]=>
    118.         array(1) {
    119.           ["val"]=>
    120.           string(13) "Email Opt Out"
    121.         }
    122.       }
    123.       [17]=>
    124.       object(SimpleXMLElement)#16 (1) {
    125.         ["@attributes"]=>
    126.         array(1) {
    127.           ["val"]=>
    128.           string(18) "Last Activity Time"
    129.         }
    130.       }
    131.     }
    132.   }
    133. }
    Но тут даже значений узлов нет, только названия атрибутов узлов. Помогите пожалуйста. Подскажите, как получить узел, с атрибутом Mobile?? На скриншоте выделил.
     

    Вложения:

    • 1.png
      1.png
      Размер файла:
      40,3 КБ
      Просмотров:
      3
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  3. fenix_63

    fenix_63 Активный пользователь

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Адрес:
    Тольятти
    А как быть, если я уже получаю готовый XML - документ в браузер?
    Мне этот XML-файлик приходит уже в готовом виде (на скриншоте) в браузер, далее мне надо как то тобраться до нужного узла в этом файлике, и до нужного значения.

    simplexml_load_file() интерпретирует XML-файл в объект SimpleXML, мне это не подходит, но я могу получить этот объект использовав

    $response = new SimpleXMLElement($get_data);

    $get_data - это XML-документ, который мне отдаёт внешняя API: https://www.zoho.com/crm/help/api/
    simplexml_load_string() мне тоже не подходит, т.к. у меня нет "строки", а есть уже готовый XML-документ, который мне отдала API.
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Не знаю о чем ты. У меня все работает
    PHP:
    1. // $foo=simplexml_load_string($get_data);
    2. $foo = simplexml_load_string('<foo><content><![CDATA[Hello, world!]]></content></foo>');
    3. echo $foo->content;
     
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    PHP:
    1. $foo=simplexml_load_string('<foo><content val="mobile"><![CDATA[Hello, world!]]></content></foo>');
    2. foreach ($foo->content as $content) {
    3.   if((string)$content['val'] === 'mobile') echo $content;
    4. }