Автор Тема: Парсинг XML  (Прочитано 123917 раз)

crazy_man

  • Пользователь
  • **
  • Сообщений: 68
Парсинг XML
« : 14 Март 2013, 11:09:48 »
Есть XML, как вытянуть из нее значения?

Код: xml
<event>

<ProcessIndex>131</ProcessIndex>

<Time_of_Day>23:34:55,4152887</Time_of_Day>

<Process_Name>Portal.exe</Process_Name>

<PID>2576</PID>

<Operation>QueryDirectory</Operation>

<Path>E:\\Games\\Portal Antology</Path>

<Result>NO MORE FILES</Result>

<Detail></Detail>

</event>
« Последнее редактирование: 29 Январь 2021, 22:09:36 от xl2night »

nlive

  • Гость
Парсинг XML
« Ответ #1 : 14 Март 2013, 11:11:16 »
Попробуй так

Код
$xml = simplexml_load_file(\"файл XML\");

echo \"<table border=1>\";

for ($i=0; $i<count($xml->event);$i++) {

        echo \"<tr><td>\".$xml->event[$i]->Process_Name.\"</td><td>\".

                $xml->event[$i]->Path.\"</td><td>\".

                $xml->event[$i]->Operation.\"</td><td>\".

                $xml->event[$i]->Result.\"</td></tr>\";

        };
« Последнее редактирование: 29 Январь 2021, 22:04:42 от nlive »

crazy_man

  • Пользователь
  • **
  • Сообщений: 68
Парсинг XML
« Ответ #2 : 14 Март 2013, 11:14:24 »
А если файл использует CDATA ? как его парсить ? вывод print_r  выдает пустой массив на этой ноде ...

типа
Код
<content><![CDATA[Hello, world!]]></content>
« Последнее редактирование: 29 Январь 2021, 22:05:02 от nlive »

nlive

  • Гость
Парсинг XML
« Ответ #3 : 14 Март 2013, 11:20:21 »
Хм :) тогда поидее можно попробовать вытащить так

Код: php
$content = simplexml_load_string(\'\');
echo (string) $content;

Но у меня сделано по другому - с regexp-а исходный xml преобразуется в xml без cdata:

Код: php
function simplexml_unCDATAise($xml) {
 
        $new_xml = NULL;
     preg_match_all(\"/\\/U\", $xml, $args);

     if (is_array($args)) {
         if (isset($args[0]) && isset($args[1])) {
             $new_xml = $xml;
             for ($i=0; $i                 $old_text = $args[0][$i];
                 $new_text = htmlspecialchars($args[1][$i]);
                 $new_xml = str_replace($old_text, $new_text, $new_xml);
             }
         }
     }

     return $new_xml;

       

 }

Использование:
Код: php
       $str = file_get_contents(\"Файло\");
       $xml=simplexml_unCDATAise($str);
       
       $xml = simplexml_load_string($xml);

И дальше уже смотри 2

crazy_man

  • Пользователь
  • **
  • Сообщений: 68
Парсинг XML
« Ответ #4 : 14 Март 2013, 11:27:15 »
Спасибо. И последний вопрос ) Если XML содержит CDATA
Код: php
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [Message] => Login Successful
            [Token] => 11111111111
            [DataFormat] => CSV

        )
)

nlive

  • Гость
Парсинг XML
« Ответ #5 : 14 Март 2013, 11:30:11 »
Попробуй так
Код: php
$attrs = $sxml->elem->attributes()->Message;

Или так
Код: php
$sxml->elem->{\"@attributes\"}->Message;

crazy_man

  • Пользователь
  • **
  • Сообщений: 68
Парсинг XML
« Ответ #6 : 14 Март 2013, 11:30:51 »
Спасибо!!!