CDATA不渲染标签

0 投票
2 回答
530 浏览
提问于 2025-04-17 02:21

我正在尝试在网页上显示混合了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>部分是绿色的,因为它被当作注释处理。

我特别想保留这些文本(而不是把<转换成&lt;),因为我通过JavaScript访问这些元素,让用户可以在一个单独的文本框中编辑它们。如果转换了,保存的时候就会变成转换后的内容,这样在后续处理时就会出现问题。我可以在保存之前再转换回来,但我觉得这样做不太对。

你觉得我哪里做错了吗?

提前谢谢你,Grant

2 个回答

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>

问题出在哪里呢?

1

CDATA是XML的一部分,而不是HTML,所以浏览器会忽略它,然后把里面的任何标签当作其他标签来处理——对于不认识的标签就忽略,认识的标签就会处理。

我觉得别无选择,只能使用&lt;等方式,在编辑时转换成标签,保存时再转换回来。

撰写回答