使用SimpleXML和CDATA

问题描述:

我想中检索使用SimpleXML在XML文件中的字符串获取一个XML文件中的特殊人物造型。但是该字符串包含字符“&”。所以我认为我必须使用CDATA来获得价值。我对此非常陌生,不知道如何去做。 这只是我想要的一个例子。使用SimpleXML和CDATA

使用example.php

<?php 
    $xmlstr = <<<XML 
    <?xml version='1.0' standalone='yes'?> 
    <Books> 
    <Book> 
     <title> PHP & XML </title> 
     <author> Some text </author> 
     <price> Some text </price> 
    </Book> 
    <Book> 
     <title> Java & Coding </title> 
     <author> Some text </author> 
     <price> Some text </price> 
    </Book> 

    </Books> 
    XML; 
?> 

这是我调用PHP文件

call.php

<?php 
    include 'Example.php'; 

    $xml = simplexml_load_string($xmlstr); 
    $abc = $xml->Book[0]->title[0]; 
    echo $abc; 
?> 

而且它给,因为字符 “&” 的错误。我无法更改我的XML。任何修改都可以通过呼叫.php 任何有关此事的帮助将不胜感激。 Thanx。

+0

那么,XML在技术上是无效的。你*应该*和*需要*来改变它。 – deceze 2013-05-14 05:42:52

+0

对不起。你能告诉我我的XML的哪一部分是无效的吗? – gecco 2013-05-14 05:46:22

+0

'&'。不裸'&'允许在裸文本节点,它是* *需要将''&。 – deceze 2013-05-14 06:01:20

你有这样的SO PHP, SimpleXML, decoding entities in CDATA

它有大约CDATA解释,可在

特殊字符情况下使用(特别是>,<和&)进行转义一个确切的问题。包含字符&甲CDATA 部分是相同的含&普通文本节点 。

对此看看。

编辑

这里是一个解决方案,如果您在使用example.php代码加载每次转换为字符串,然后下面是一个解决方案。

$xmlstr = str_replace("&","&amp;",$xmlstr); 
    $xml = simplexml_load_string($xmlstr); 
    $abc = $xml->Book[0]->title[0]; 
    echo $abc; 
+0

是的,我知道如何使用CDATA一个XML

PHP中 XML 但我的问题是我如何使用它在我的呼唤作为.PHP我不能做我的使用example.php – gecco 2013-05-14 05:54:19
+0

任何更改查看更新的代码:) – NullPointer 2013-05-14 06:17:03

+0

是的,它是working.Thank你这么多。 :) – gecco 2013-05-14 06:19:14