所以另一个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');
答案 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无关。)