2012-02-23 11 views
0

もう1つのCDATAがコンテンツの質問を返すようになりました。私は多くの答えを見たことがありますが、私はそれらすべてを試しましたが、私はまだ内容だけを取得します。より詳細にはSimpleXMLはCDATA要素のコンテンツを返信し続けます

私は(内部の多くのNewsItemを含む)xmlファイルを持っている:私はbody.contentのコンテンツを取得しようとしています

<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> 

。ここで

は私のコードです:

$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 

                ) 

              ) 

            ) 

          ) 

        ) 

      ) 

要素で(文字列)を使用したかどうかを試しましたが、

また、私はあなたが文字列「内容」で

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

存在しない要素を連結しているので、あなたの例では、「コンテンツ」を返すと思います

$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

body.contentのように)、あなたは代替PHPの表記を使用する必要があります。

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

を使用してみました - おそらくPHPは文句を言い名前の内容には一定していないので、あなたが「内容」を意味すると仮定します。

このように、私の推測では、あなたが名にドットを持つ要素を選択するための別の方法を見つける必要があります。 PHP識別子することはできません要素名について

(。この問題は、CDATAに関連すると表示されません)