Получение содержимого CDATA из XML с использованием PHP и simplexml
Вопрос
У меня есть следующая структура XML:
<?xml version="1.0" ?>
<course xml:lang="nl">
<body>
<item id="787900813228567" view="12000" title="0x|Beschrijving" engtitle="0x|Description"><![CDATA[Dit college leert studenten hoe ze een onderzoek kunn$
<item id="5453116633894965" view="12000" title="0x|Onderwijsvorm" engtitle="0x|Method of instruction"><![CDATA[instructiecollege]]></item>
<item id="7433550075448316" view="12000" title="0x|Toetsing" engtitle="0x|Examination"><![CDATA[Opdrachten/werkstuk]]></item>
<item id="015071401858970545" view="12000" title="0x|Literatuur" engtitle="0x|Required reading"><![CDATA[Wayne C. Booth, Gregory G. Colomb, Joseph M. Wi$
<item id="5960589172957031" view="12000" title="0x|Uitbreiding" engtitle="0x|Expansion"><![CDATA[]]></item>
<item id="3610066867901779" view="12000" title="0x|Aansluiting" engtitle="0x|Place in study program"><![CDATA[]]></item>
<item id="19232369892482925" view="12000" title="0x|Toegangseisen" engtitle="0x|Course requirements"><![CDATA[]]></item>
<item id="3332396346891524" view="12000" title="0x|Doelgroep" engtitle="0x|Target audience"><![CDATA[]]></item>
<item id="6606851872934866" view="12000" title="0x|Aanmelden bij" engtitle="0x|Enrollment at"><![CDATA[]]></item>
<item id="1478643580820973" view="12000" title="0x|Informatie bij" engtitle="0x|Information at"><![CDATA[Docent]]></item>
<item id="9710608434763993" view="12000" title="0x|Rooster" engtitle="0x|Schedule"><![CDATA[1e semester, maandag 15.00-17.00, zaal 1175/030]]></item>
</body>
</course>
Я хочу получить данные из одного из тегов элемента.Чтобы добраться до этого тега, я использую следующий xpath:
$description = $xml->xpath("//item[@title='0x|Beschrijving']");
Это действительно возвращает массив в форме:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 787900813228567
[view] => 12000
[title] => 0x|Beschrijving
[engtitle] => 0x|Description
)
)
)
Но где находится фактическая информация (которая хранится между тегами элементов)?Наверное, я делаю что-то не так, но не могу понять, что это может быть...Наверное, что-то очень простое...Помощь будет оценена по достоинству.
Решение
Когда вы загружаете XML-файл, вам нужно будет обработать CDATA..Этот пример работает:
<?php
$xml = simplexml_load_file('file.xml', NULL, LIBXML_NOCDATA);
$description = $xml->xpath("//item[@title='0x|Beschrijving']");
var_dump($description);
?>
Вот результат:
array(1) {
[0]=>
object(SimpleXMLElement)#2 (2) {
["@attributes"]=>
array(4) {
["id"]=>
string(15) "787900813228567"
["view"]=>
string(5) "12000"
["title"]=>
string(15) "0x|Beschrijving"
["engtitle"]=>
string(14) "0x|Description"
}
[0]=>
string(41) "Dit college leert studenten hoe ze een on"
}
}
Другие советы
Я считаю, что это эквивалентно методу __toString() объекта, поэтому
echo $description[0];
Должен отобразиться, или вы можете его применить;
$str = (string) $description[0];
Взгляните на документацию PHP.net для «SimpleXMLElement» (http://uk.php.net/manual/en/function.simplexml-element-children.php) выглядит как преобразование узла в строку "(String) $ value;" делает трюк.
В противном случае на этой странице есть множество примеров, которые должны указать вам правильное направление!
$description = $xml->xpath("//item[@title='0x|Beschrijving']");
while(list( , $node) = each($description)) {
echo($node);
}
решение Dreamwerx лучше