1

Тема: Парсинг 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>

2

Re: Парсинг XML

Попробуй так

$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>";
 
        };

3 (14 Mar 2013 11:15:02 отредактировано crazy_man)

Re: Парсинг XML

А если файл использует CDATA ? как его парсить ? вывод print_r  выдает пустой массив на этой ноде ...

типа

<content><![CDATA[Hello, world!]]></content>

4

Re: Парсинг XML

Хм smile тогда поидее можно попробовать вытащить так

$content = simplexml_load_string('<content><![CDATA[Hello, world!]]></content>');
echo (string) $content;

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

function simplexml_unCDATAise($xml) {
 
        $new_xml = NULL;
     preg_match_all("/\<!\[CDATA\[(.*)\]\]\>/U", $xml, $args);
 
     if (is_array($args)) {
         if (isset($args[0]) && isset($args[1])) {
             $new_xml = $xml;
             for ($i=0; $i<count($args[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;
 
 
 
}

Использование:

$str = file_get_contents("Файло");
       $xml=simplexml_unCDATAise($str);
 
       $xml = simplexml_load_string($xml);

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

5

Re: Парсинг XML

Спасибо. И последний вопрос ) Если XML содержит CDATA

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [Message] => Login Successful
            [Token] => 11111111111
            [DataFormat] => CSV
 
        )
)

6

Re: Парсинг XML

Попробуй так

$attrs = $sxml->elem->attributes()->Message;

Или так

$sxml->elem->{"@attributes"}->Message;

7

Re: Парсинг XML

Спасибо!!!