2012-02-23 26 views
0

因此,另一个CDATA返回的内容问题。我见过很多答案,但即使我尝试了所有答案,我仍然只能获得内容。SimpleXML不断返回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

对于那些不能PHP标识符(如body.content),您必须使用另一种PHP符号元素名称:

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

尝试,我认为你的榜样返回“内容”,因为你是串联,不以字符串“内容”存在

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

元素 - 可能PHP抱怨名称内容并不固定,因此假定您的意思是“内容”。

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

(这个问题似乎没有涉及到CDATA。)