在simplexmliterator中访问CDATA值

时间:2014-11-13 05:09:44

标签: php simplexml cdata

我有一个简单的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>

我尝试做的是从StepCalculation的{​​{1}}子节点中提取Value节点的属性值以及CDATA值{1}}个节点。

我可以毫无问题地获取步骤属性值:

Repetition

但是我在获取CDATA时遇到了问题。我已经尝试了很多方法来获得它但没有成功。

我曾经注意到,当我死了并且在我的for循环中var_dump $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看起来甚至看起来都没有被识别出来:

$iterator->current()

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" } 节点的内容是空的。

有没有办法获得CDATA?

1 个答案:

答案 0 :(得分:0)

不,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;
}

Sample Output