2014-12-04 74 views
1

我試圖在HTML中顯示原始XML。如果沒有HTML元素的XML顯示細膩但是一旦添加我的內容,我給出的這個錯誤在HTML中顯示XML

error on line 37 at column 6: XML declaration allowed only at the start of the document 

做一些研究之後,這個問題是很常見的,有白色的空間,但我不能發現任何。下面是我的源代碼問題。

<?php require 'header.php'; ?> 
<div class="sixteen columns"> 
<h3>XML</h3> 
<?php 
header("Content-Type:text/xml");//Tell browser to expect xml 
include("config/init.php"); 
$connection = mysqli_connect($hostname, $username, $password, $databaseName) or die("you did not connect"); 
$query = "SELECT * FROM art"; 
$result = mysqli_query($connection, $query) or die (mysqli_error($connection)); 
//Top of xml file 
$_xml = '<?xml version="1.0" encoding="UTF-8"?>'; 
$_xml .="<art>"; 
while($row = mysqli_fetch_array($result)) { 
$_xml .="<art>"; 
$_xml .="<art_name>".$row['name']."</art_name>"; 
$_xml .="<art_category>".$row['category']."</art_category>"; 
$_xml .="<art_price>".$row['price']."</art_price>"; 
$_xml .="</art>"; 
} 
$_xml .="</art>"; 
//Parse and create an xml object using the string 
$xmlobj=new SimpleXMLElement($_xml); 
print $xmlobj->asXML(); 
$xmlobj->asXML('art.xml'); 
?> 
</div> 
<?php require 'footer.php'; ?> 

http://www.acalvert.x10host.com/xml.php如果你想查看頁面源

+0

您不能在HTML文檔中更改內容類型。您是否嘗試顯示* XML標記*或嘗試使用XML標記,以便以某種方式呈現XML元素?究竟如何? XML元素沒有默認的格式(除了CSS意義上的內聯元素)。 – 2014-12-04 23:25:15

+0

試圖顯示XML標記,以便它顯示在我的頁面中。 I.E我可以查看頁眉,頁腳等 – Calv 2014-12-04 23:37:15

回答

1

如果你想標記來顯示,然後更改所有<&lt;>&gt;

任何顯示加載XML字符串變量,並使用此之前:

$before = array('<','>'); 
$after = array('&lt;','&gt;'); 
$xml = str_replace($before,$after,$xml); 
echo $xml; 

其次 - 顯示任何字符後,你不能叫header()功能。根本不要使用它。您需要在文檔中使用默認text/html

+0

我已經刪除了標題功能,現在顯示XML。然而不是以原始形式,這是Id喜歡的。我不完全理解你的答案,因爲我不是專家,仍然在學習基礎知識。代碼中的 – Calv 2014-12-04 23:54:28

+0

'<'在HTML頁面中顯示爲'<'。因此,改爲'$ xmlobj = new SimpleXMLElement($ _ xml);'和後者調用粘貼我的代碼,只需將'$ xml'改爲我的$ _xml' – Forien 2014-12-04 23:59:56

+0

現在可以工作,謝謝 – Calv 2014-12-05 00:06:37

-1
  1. 您可以使用simplexml類來創建XML節點。
  2. 如果你想要一個原始的XML,你不能使用<div class="sixteen columns"><h3>XML</h3></div>。您必須決定是否需要XML或HTML輸出。

這裏是你如何使用的SimpleXMLElement創建和打印XML輸出:

How to write CDATA using SimpleXmlElement?

你的情況,這將是:

<?php 
class SimpleXMLExtended extends SimpleXMLElement { 
    public function addCData($cdata_text) { 
     $node = dom_import_simplexml($this); 
     $no = $node->ownerDocument; 
     $node->appendChild($no->createCDATASection($cdata_text)); 
    } 
} 


$docXML = new SimpleXMLExtended("<art/>"); 

while($row = mysqli_fetch_array($result)) { 
    $nodeXML0 = $docXML->addChild("art"); 
    $nodeXML01 = $nodeXML0->addChild("art_name"); 
    $nodeXML01->addCData($row['name']); 
    $nodeXML02 = $nodeXML0->addChild("art_category"); 
    $nodeXML02->addCData($row['category']); 
    $nodeXML03 = $nodeXML0->addChild("art_price"); 
    $nodeXML03->addCData($row['price']); 

} 
Header('Content-type: text/xml'); 
echo $docXML->asXML(); 
?> 
+0

那麼爲什麼這個答案降級呢?任何反對這個解決方案的論點 – 2014-12-05 15:08:21

-1

當你想顯示XML標記作爲文本(正如你在評論中所闡明的那樣),而不是解釋爲標籤,你只需要像在HTML文檔中將HTML標記顯示爲文本一樣。這意味着

  • 逸出的「<」任何發生如&lt;
  • 逸出的「&」任何發生如&amp;

例如,代替

$_xml = '<?xml version="1.0" encoding="UTF-8"?>'; 

寫入

$_xml = '&amp;?xml version="1.0" encoding="UTF-8"?>'; 

此外,你需要,因爲你已經產生了響應體去除線

header("Content-Type:text/xml");//Tell browser to expect xml 

並不能注入任何HTTP標頭。

的方式告訴標記被原樣顯示,而不是解釋的瀏覽器:標籤<xmp></xmp>之間的包裹。xmp元素從一開始就一直在HTML實現中,但很久以來它已被宣佈爲廢棄/廢棄。它仍然有效,並且還會導致關於換行符和空格的源格式保留。