CDATA不渲染标签
我正在尝试在网页上显示混合了XML标签和普通文本的内容。这个过程是通过一个Python脚本来完成的,这个脚本从数据库中获取数据。我把问题简化成了下面的程序。
#!/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
当我在IE中查看页面的HTML源代码时,我能看到以下内容:
<html><body>
start:<![CDATA[This is the <xml> tagxml.]]>:end
</body></html>
在Chrome中查看源代码时也能看到同样的内容,不过似乎<![CDATA[This is the <xml>
部分是绿色的,因为它被当作注释处理。
我特别想保留这些文本(而不是把<
转换成<
),因为我通过JavaScript访问这些元素,让用户可以在一个单独的文本框中编辑它们。如果转换了,保存的时候就会变成转换后的内容,这样在后续处理时就会出现问题。我可以在保存之前再转换回来,但我觉得这样做不太对。
你觉得我哪里做错了吗?
提前谢谢你,Grant
2 个回答
0
<!DOCTYPE html>
<html>
<body>
<div id="div1"><b>hi</b></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>
问题出在哪里呢?
1
CDATA是XML的一部分,而不是HTML,所以浏览器会忽略它,然后把里面的任何标签当作其他标签来处理——对于不认识的标签就忽略,认识的标签就会处理。
我觉得别无选择,只能使用<
等方式,在编辑时转换成标签,保存时再转换回来。