2016-10-01 24 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