2016-10-01 28 views
0

我的工作xml.php文件如下结构:PHP代码

<?php 
 
    $xmlstr = <<<'XML' 
 
    <?xml version='1.0' standalone='yes'?> 
 

 
<root> 
 
    <subroot> 
 
    <![CDATA[ 
 

 
... some php code here ... 
 

 
      ]]> 
 
    </subroot> 
 
</root> 
 

 
    XML; 
 
    ?>

我要添加CDATA之间的下面的PHP代码,以便我们可以调用后来通过index.html文件:

 <?php 
 
      include $_SERVER['DOCUMENT_ROOT'].'xml.php'; 
 
      $template = new SimpleXMLElement($xmlstr); 
 
      echo $articles->article[0]->name; 
 
     ?>

但是,它并没有像这样工作,并已经没有想法,我们如何才能使其工作。有什么建议么?

+2

,你需要'这不是一个有效的XML ' – cske

+0

我认为你的观察是正确的,我只是在根元素的一部分的subroot元素之间包含cdata。根据akrys的建议,我将代码的最后一行从XML更改为“XML”。 –

回答

2
  1. 问题:

你的XML字符串需要可以解决的一个元素。至少应该在您的XML字符串中定义一个根元素。通常它叫做root

  • 问题
  • 你的XML在here文档定义,其行为类似于在双引号的字符串。这意味着所有变量都被解析,而字符串被存储到$xmlstr

    因此,在将其存储到$xmlstr之后,您将无法获得有效的源代码。

    您需要定义这个单引号。然后你的变量不被解析和替换。这可以使用nowdoc(自PHP 5.3起可用)完成。你只需要添加两个单引号标志(<<<'XML'而不是<<<XML

    所以,毕竟你xml.php代码(我明白你)应该是这样的:

    <?php 
    $xmlstr = <<<'XML' 
    <?xml version='1.0' standalone='yes'?> 
    <root> 
    <![CDATA[ 
        <?php 
        include $_SERVER['DOCUMENT_ROOT'].'xml.php'; 
        $template = new SimpleXMLElement($xmlstr); 
        echo $articles->article[0]->name; 
        ?> 
    ]]> 
    </root> 
    XML; 
    
    
    $x = new SimpleXMLElement($xmlstr); 
    print (string)$x; //prints the code as it is defined in $xmlstr 
    

    详细到定界符nowdoc可以在这里找到: https://secure.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc https://secure.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc