SimpleXML保持在CDATA元素上返回内容

时间:2012-02-23 21:14:01

标签: php xml simplexml cdata

所以另一个CDATA返回内容问题。我已经看到了很多答案,但即使我尝试了所有答案,我仍然只能获得内容。

更多细节:

我有一个xml文件(里面包含很多NewsItem):

<NewsML>
<NewsItem>    
    <NewsComponent>               
        <ContentItem>                      
            <DataContent>                
                <body>                    
                    <body.content>                        
                        <![CDATA[<p>This is what I am trying to retrieve</p>]]>
                    </body.content>
                </body>
            </DataContent>
        </ContentItem>
    </NewsComponent>
</NewsItem>

我正在尝试获取body.content的内容。

这是我的代码:

$xml = simplexml_load_file('path/to/my/xml.xml',null,LIBXML_NOCDATA);

if(count($xml->children()) > 0){
    foreach($xml->children() as $element){
        $description = (string)$element->NewsComponent->ContentItem->DataContent->body->body.content;
        echo $description;
    }
}
echo '<pre>';
print_r($xml);
echo '</pre>';

我的回声回归:     含量

即使我确实看到了我的xml的print_r中的内容,我们可以在这里看到:

SimpleXMLElement Object
(
    [NewsItem] => Array
    (
        [0] => SimpleXMLElement Object
            (

                [NewsComponent] => SimpleXMLElement Object
                    (                            

                        [ContentItem] => Array
                            (
                                [0] => SimpleXMLElement Object
                                    (

                                        [DataContent] => SimpleXMLElement Object
                                            (
                                                [body] => SimpleXMLElement Object
                                                    (
                                                        [body.content] => This is what I am trying to retieve

                                                    )

                                            )

                                    )

                            )

                    )

            )

我尝试使用(字符串)或不使用元素。

我也尝试过使用

$xml = simplexml_load_file('path/to/my/xml.xml',null,LIBXML_NOCDATA);
vs
$xml = simplexml_load_file('path/to/my/xml.xml',"SimpleXMLElement",LIBXML_NOCDATA);
vs
$xml = simplexml_load_file('path/to/my/xml.xml');

2 个答案:

答案 0 :(得分:2)

对于不能是PHP标识符的元素名称(如body.content),您必须使用其他PHP表示法:

$element->NewsComponent->ContentItem->DataContent->body->{'body.content'};

答案 1 :(得分:1)

我认为你的例子返回'content',因为你正在连接一个不存在的元素

$element->NewsComponent->ContentItem->DataContent->body->body

字符串'content' - 可能PHP抱怨名称内容没有常数,因此假设你的意思是'内容'。

因此,我猜你需要找到另一种方法来选择名称中带点的元素。

(此问题似乎与CDATA无关。)