У меня есть простая структура 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?
Нет, это 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;
}
Других решений пока нет …