2011-09-15 87 views
0

我試圖顯示與網頁上純文本混合的XML標記。我從一個從數據庫中獲取數據的python腳本執行此操作。我已經簡化了我的問題到下面的程序。CDATA不呈現標記

#!/usr/local/bin/python 
print """Content-type: text/html;charset=utf-8\n\n""" 
print """<html><body> 
start:<![CDATA[This is the <xml> tag </xml>.]]>:end 
</body></html>""" 

我期待它顯示如下:

start:This is the <xml> tag </xml>.:end 

在這兩個IE8和Chrome15但是它顯示以下內容:

start: tag .]]>:end 

當我看的HTML源代碼在IE的頁面中,我可以看到以下內容:

<html><body> 
start:<![CDATA[This is the <xml> tagxml.]]>:end 
</body></html> 

在Chrome瀏覽器中查看源代碼時看到的是相同的,但看起來<![CDATA[This is the <xml>部分呈綠色,因爲它被視爲評論。

我特別想保留文本(而不是將<轉換爲&lt;),因爲通過javascript我訪問了元素,允許用戶在單獨的textarea中編輯它們。轉換它們然後將它們保存轉換,導致進一步處理中的問題。我可以在保存前將它們轉換回來,但這似乎是錯誤的方法。

任何想法我做錯了什麼?

由於提前, 格蘭特

回答

1

CDATA是XML,不是HTML的一部分,所以瀏覽器會忽略它,然後它把任何標籤,因爲這將任何其他標記 - 忽略那些不承認,並關注它所做的事情。

我認爲除了使用&lt;等之外別無選擇,在編輯時轉換爲標籤並在保存時轉換回來。

+0

謝謝,我必須試一試我猜。 – grantstead

0
<!DOCTYPE html> 
<html> 
    <body> 
     <div id="div1">&lt;b&gt;hi&lt;/b&gt;</div> 
     <textarea id="area"></textarea> 
     <script type="text/javascript"> 
      var div1 = document.getElementById('div1') 
      var area = document.getElementById('area') 
      var text = div1.firstChild.nodeValue 
      area.value = text 
     </script> 
    </body> 
</html> 

問題出在哪裏?

+0

謝謝。我試了一下,它似乎起初工作。然而,我使用innerHTML而不是firstChild.nodeValue,因爲可能有多個文本節點(在我的td中)。 innerHTML似乎不起作用,但innerTEXT確實(儘管我不確定它支持多麼廣泛)。 – grantstead

+0

@grantstead innerText是一箇舊的IE屬性,但有一個標籤 - textContent,所以'e.textContent || e.innerText || 「」'。 – Leonid