javascript生成/解析dom的CDATA类型的字段的代码

两段demo代码如下(for ie only):

  <script type="text/javascript">

  //demo1

  var  xmlDoc  =  new  ActiveXObject("Msxml2.DOMDocument");

  var  root;

  var  CDATASection;

  xmlDoc.async  =  false;

  xmlDoc.loadXML("<a/>");

  root  =  xmlDoc.documentElement;

  CDATASection  =  xmlDoc.createCDATASection("Hello  World!");

  root.appendChild(CDATASection);

  b=xmlDoc.createElement("Test")

  b.text="hahahahaha"

  root.appendChild(b);

  alert(root.xml);

  for(i  =0;i<root.childNodes.length;i++)

  {

  if(root.childNodes[i].nodeType==4)

  alert(root.childNodes[i].nodeValue)

  }

  </script>

  <script type="text/javascript">

  //demo2

  var  xmlDoc  =  new  ActiveXObject("Msxml2.DOMDocument");

  xmlDoc.async  =  false;

  xmlDoc.loadXML("<a><![CDATA[aaaaaaaaaaaaaaaaaaaaa]]></a>");

  root  =  xmlDoc.documentElement;

  for(i  =0;i<root.childNodes.length;i++)

  {

  if(root.childNodes[i].nodeType==4)

  alert(root.childNodes[i].nodeValue)

  }

  </script>

  //demo3( for firefox)

  <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

  < HTML >

  < HEAD >

  < TITLE >  使firefox对xml的处理兼容IE的selectSingleNode selectNodes方法  </ TITLE >

  < META  NAME ="Author"  CONTENT ="emu" >

  < META  NAME ="Keywords"  CONTENT ="firefox IE selectSingleNode selectNodes" >

  < META  NAME ="Description"  CONTENT ="使firefox可以支持selectSingleNode selectNodes方法" >

  < SCRIPT  LANGUAGE ="JavaScript" >

  <!--

  var  isIE  =   !! document.all;

  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;

  }

  if ( ! isIE){

  var  ex;

  XMLDocument.prototype.__proto__.__defineGetter__( " xml " ,  function (){

  try {

  return   new  XMLSerializer().serializeToString( this );

  } catch (ex){

  var  d  =  document.createElement( " div " );

  d.appendChild( this .cloneNode( true ));

  return  d.innerHTML;

  }

  });

  Element.prototype.__proto__.__defineGetter__( " xml " ,  function (){

  try {

  return   new  XMLSerializer().serializeToString( this );

  } catch (ex){

  var  d  =  document.createElement( " div " );

  d.appendChild( this .cloneNode( true ));

  return  d.innerHTML;

  }

  });

  XMLDocument.prototype.__proto__.__defineGetter__( " text " ,  function (){

  return   this .firstChild.textContent

  });

  Element.prototype.__proto__.__defineGetter__( " text " ,  function (){

  return   this .textContent

  });

  XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (xpath){

  var  x = this .selectNodes(xpath)

  if ( ! x  ||  x.length < 1 ) return   null ;

  return  x[ 0 ];

  }

  XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){

  var  xpe  =   new  XPathEvaluator();

  var  nsResolver  =  xpe.createNSResolver( this .ownerDocument  ==   null   ?

  this .documentElement :  this .ownerDocument.documentElement);

  var  result  =  xpe.evaluate(xpath,  this , nsResolver,  0 ,  null );

  var  found  =  [];

  var  res;

  while  (res  =  result.iterateNext())

  found.push(res);

  return  found;

  }

  }

  var  x  =  parseXML( " <people>  <person first-name=\ " eric\ "  middle-initial=\ " H\ "  last-name=\ " jung\ " >    <address street=\ " 321  south st\ "  city=\ " denver\ "  state=\ " co\ "  country=\ " usa\ " />    <address street=\ " 123  main st\ "  city=\ " arlington\ "  state=\ " ma\ "  country=\ " usa\ " />  </person>  <person first-name=\ " jed\ "  last-name=\ " brown\ " >    <address street=\ " 321  north st\ "  city=\ " atlanta\ "  state=\ " ga\ "  country=\ " usa\ " />    <address street=\ " 123  west st\ "  city=\ " seattle\ "  state=\ " wa\ "  country=\ " usa\ " />    <address street=\ " 321  south avenue\ "  city=\ " denver\ "  state=\ " co\ "  country=\ " usa\ " />  </person></people> " );

  alert( " 搜索所有人的姓氏(last-name) " )

  var  results  =  x.selectNodes( " //person/@last-name " );

  for  ( var  i = 0 ; i < results.length;i ++ )

  alert( " Person # "   +  i  +   "  has the last name  "   +  results[i].nodeValue);

  alert( " 搜索第二个人 " );

  //  IE是以0为下标基数的,而不是1

  if ( ! document.all)

  results  =  x.selectSingleNode( " /people/person[2] " );

  else

  results  =  x.selectSingleNode( " /people/person[1] " );

  alert(results.xml)

  alert( " 获得住址在donver街上的人 " );

  results  =  x.selectNodes( " //person[address/@city='denver'] " );

  for  ( var  i = 0 ; i < results.length;i ++ )alert(results[i].xml)

  if ( ! document.all){

  //  获得所有街名中带south的地址

  results  =  x.selectNodes( " //address[contains(@street, 'south')] " );

  alert(results[ 0 ].xml);

  } else {

  alert( " IE不支持 //address[contains(@street, 'south')] 这种查询方式 " )

  }

  // -->

  </ SCRIPT >

  </ HEAD >

  < BODY >

  </ BODY >

  </ HTML >

  //demo4( cross brower)

  http://kb.mozillazine.org/XPath