Доступ к значениям CDATA в simplexmliterator

У меня есть простая структура XML:

<?xml version="1.0"?>
<fmxmlsnippet type="FMObjectList">
<Step enable="True" id="141" name="Set Variable">
<Value>
<Calculation><![CDATA[Get(RecordID)]]></Calculation>
</Value>
<Repetition>
<Calculation><![CDATA[1]]></Calculation>
</Repetition>
<Name>$currentRecord</Name>
</Step>
</fmxmlsnippet>

То, что я пытаюсь сделать, это вытащить значения атрибута для Step узел, а также значения CDATA образуют Calculation дочерний узел для Value а также Repetition узлы.

Я могу получить значения атрибута шага без проблем:

$iterator = new SimpleXMLIterator($xml);

for($iterator->rewind() ; $iterator->valid() ; $iterator->next()){
$stepId = $iterator->current()->attributes()->id->__toString();
$stepName = $iterator->current()->attributes()->name->__toString();
$stepEnable= $iterator->current()->attributes()->enable->__toString();
}

Но у меня проблема с получением CDATA. Я пробовал многочисленные способы получить его без успеха.

Однажды я заметил, что когда я умираю и var_dump результат $iterator->current() в моем цикле for CDATA даже не выглядит так, как будто он распознан:

object(SimpleXMLIterator)#3 (4) {
["@attributes"]=>
array(3) {
["enable"]=>
string(4) "True"["id"]=>
string(3) "141"["name"]=>
string(12) "Set Variable"}
["Value"]=>
object(SimpleXMLIterator)#4 (1) {
["Calculation"]=>
object(SimpleXMLIterator)#6 (0) {
}
}
["Repetition"]=>
object(SimpleXMLIterator)#5 (1) {
["Calculation"]=>
object(SimpleXMLIterator)#6 (0) {
}
}
["Name"]=>
string(14) "$currentRecord"}

Это как содержание Calculation узлы пустые.

Есть ли способ получить CDATA?

1

Решение

Нет, это var_dump() просто вводит в заблуждение, он показывает его пустым, но его это там. Просто приведите его и назначьте:

for($iterator->rewind() ; $iterator->valid() ; $iterator->next()){
$stepId = $iterator->current()->attributes()->id->__toString();
$stepName = $iterator->current()->attributes()->name->__toString();
$stepEnable= $iterator->current()->attributes()->enable->__toString();

$calculation = (string) $iterator->current()->Value->Calculation;
$repitition = (string) $iterator->current()->Repetition->Calculation;

echo $calculation . '<br/>' . $repitition;
}

Пример вывода

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector