2012-02-23 50 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。)