emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks
http://developer.mozilla.org/en/docs/Using_XML_Data_Islands_in_Mozilla

这篇文章的名字就叫做《Using XML Data Islands in Mozilla》,曾经让我很长的一段时间里面以为Mozilla(以及firefox)是支持xml数据岛的,只是支持的方式有所不同。今天再次重读的时候才突然注意到,其实第一段已经讲明白了,这只是个mimic

One handy feature of Internet Explorer is the ability to use data islands to link data to html controls on a page. This feature is not readily built into Mozilla, but one can easily mimic this behaviour to build cross-browser web applications.

(emu译)IE的一个很好用的特性是可以用把数据岛把数据和html连接起来(自动展现数据)。Mozilla还没有准备为这个特性提供内建的支持,但是我们可以轻易的模仿IE这个特性来构建跨浏览器的网络应用。


假的就是假的,所以有些特性是模仿不出来的,你可以用nodeValue来代替Text属性,可以用innerHTML来代替xml属性,但是你怎么处理这个数据呢: <![CDATA[ abc ]]>  。html没有提供CDATA这样的xml支持。

还好Mozilla提供了另一种解决方案 DOMPaser 。我们可以通过这样的方式来提供对页面内xml代码的一致性的解析和使用:

function parseXML(st){
    
if(isIE){
        
var result = new ActiveXObject("microsoft.XMLDOM");
        result.loadXML(st);
    }
else{
        
var parser = new DOMParser();
                
var result = parser.parseFromString(st, "text/xml");
  }
    
return result;
}

对节点的一致性操作请参考 http://www.blogjava.net/emu/articles/32699.html
posted on 2006-03-06 20:44 emu 阅读(3734) 评论(10)  编辑  收藏

评论

# re: 原来Firefox还是不支持xml数据岛 2006-04-11 17:41 hunter
微软本身对数据岛也只是是临时支持的,在msxml2里面有一个临时解决方案
它的文档里面说这个方案未来是可能会被废除的
所以是一个不稳定、长远的方案  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2006-04-12 10:24 emu
从IE5到IE7,xml数据岛应该马上就10岁了(看来肯定能活过10岁),firefox才几岁,netscape才风光了几年,,10年时间应该称得上很稳定很长久了吧  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2006-10-24 12:50 Lirf
看来firefox还是太年青了啊...呵呵  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2007-01-09 22:14 hobo
html没有提供CDATA这样的xml支持。
------------------
可以用xmp标签吧.  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2007-01-10 00:07 emu
不能吧。没有看出来xmp有任何可以比div更好的代替xml数据岛的潜力。  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2007-01-10 23:26 Hobo
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>flashloader</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
<xmp id="xmp">
<table>
<tr>
<td>
<![CDATA[
<script>
String.prototype.trim = function()
{
[code];
};
</script>
]]>
</td>
</tr>
</table>
</xmp>
<div id="div">
<table>
<tr>
<td>
<![CDATA[
<script>
String.prototype.trim = function()
{
[code];
};
</script>
]]>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
/*<![CDATA[*/
var getXML = function(sXML)
{
try
{
var _xmlDom = new ActiveXObject("Microsoft.XmlDom");
_xmlDom.loadXML(sXML);
}
catch (e)
{
var _xmlDom = (new DOMParser()).parseFromString(sXML, "text/xml");
}

return _xmlDom;
};

alert(getXML(document.getElementById("xmp").innerHTML).xml);
alert(getXML(document.getElementById("div").innerHTML).xml);
/*]]>*/
</script>
</body>
</html>
  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2007-01-10 23:30 Hobo
if (!!document.all)
{
alert(getXML(document.getElementById("xmp").innerHTML).xml);
alert(getXML(document.getElementById("div").innerHTML).xml);
}
else
{
alert((new XMLSerializer).serializeToString(getXML(document.getElementById("xmp").innerHTML)));
alert((new XMLSerializer).serializeToString(getXML(document.getElementById("div").innerHTML)));
}  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2007-01-11 09:21 emu
支持CDATA的意思不是把CDATA打印出来,而是不把CDATA打印出来。

function parseXML(st){
if(!!document.all){
var result = new ActiveXObject("microsoft.XMLDOM");
result.loadXML(st);
}else{
var parser = new DOMParser();
var result = parser.parseFromString(st, "text/xml");
}
return result;
}
var x=parseXML("<data><![CDATA[ <<<abc>>> ]]></data>")
alert(x.getElementsByTagName("data")[0][(!!document.all)?"text":"textContent"])

还是不明白CDATA的作用?试试把CDATA去掉会如何?
x=parseXML("<data> <<<abc>>> </data>")
alert(x.getElementsByTagName("data")[0][(!!document.all)?"text":"textContent"])
  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2007-01-11 10:13 hobo
<xmp id="xmp"><data><![CDATA[ <<<abc>>> ]]></data></xmp>
<div id="div"><data><![CDATA[ <<<abc>>> ]]></data></div>

<script type="text/javascript">
/*<![CDATA[*/
alert(document.getElementById("xmp").innerHTML);
alert(document.getElementById("div").innerHTML);
/*]]>*/
</script>

xmp innerHTML会原样输出,而div不能.  回复  更多评论
  

# re: 原来Firefox还是不支持xml数据岛 2007-01-11 14:30 emu
拜托,问题不在于是否原样输出。而是xmp和div都没有办法解析出来CDATA的意义,把CDATA当成节点值输出出来了。麻烦再看一下我上午的代码。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: