Есть 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>
Попробуй так
$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>\";
};
А если файл использует CDATA ? как его парсить ? вывод print_r выдает пустой массив на этой ноде ...
типа
<content><![CDATA[Hello, world!]]></content>
Хм :) тогда поидее можно попробовать вытащить так
$content = simplexml_load_string(\'\');
echo (string) $content;
Но у меня сделано по другому - с regexp-а исходный xml преобразуется в xml без cdata:
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;
}
Использование:
$str = file_get_contents(\"Файло\");
$xml=simplexml_unCDATAise($str);
$xml = simplexml_load_string($xml);
И дальше уже смотри 2
Спасибо. И последний вопрос ) Если XML содержит CDATA
SimpleXMLElement Object
(
[@attributes] => Array
(
[Message] => Login Successful
[Token] => 11111111111
[DataFormat] => CSV
)
)
Попробуй так
$attrs = $sxml->elem->attributes()->Message;
Или так
$sxml->elem->{\"@attributes\"}->Message;