PageRenderTime 35ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/examples/dynamictable/public/phpolait/jsolait/lib/xml.js

http://pyjamas.googlecode.com/
JavaScript | 180 lines | 180 code | 0 blank | 0 comment | 10 complexity | 3c0a909ae28f5ebf5dd7d874f8ef7c47 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. Module("xml","1.1.2", function(mod){
  2. mod.NoXMLParser=Class("NoXMLParser", mod.Exception, function(publ, supr){
  3. publ.init=function(trace){
  4. supr(this).init("Could not create an XML parser.", trace);
  5. }
  6. })
  7. mod.ParsingFailed=Class("ParsingFailed", mod.Exception, function(publ, supr){
  8. publ.init=function(xml,trace){
  9. supr(this).init("Failed parsing XML document.",trace);
  10. this.xml = xml;
  11. }
  12. publ.xml;
  13. })
  14. mod.parseXML=function(xml){
  15. var obj=null;
  16. var isMoz=false;
  17. var isIE=false;
  18. var isASV=false;
  19. try{
  20. var p=window.parseXML;
  21. if(p==null){
  22. throw "No ASV paseXML";
  23. }
  24. isASV=true;
  25. }catch(e){
  26. try{
  27. obj = new DOMParser();
  28. isMoz=true;
  29. }catch(e){
  30. try{
  31. obj = new ActiveXObject("Msxml2.DomDocument.4.0");
  32. isIE=true;
  33. }catch(e){
  34. try{
  35. obj = new ActiveXObject("Msxml2.DomDocument");
  36. isIE=true;
  37. }catch(e){
  38. try{
  39. obj = new ActiveXObject("microsoft.XMLDOM");
  40. isIE=true;
  41. }catch(e){
  42. throw new mod.NoXMLParser(e);
  43. }
  44. }
  45. }
  46. }
  47. }
  48. try{
  49. if(isMoz){
  50. obj = obj.parseFromString(xml, "text/xml");
  51. return obj;
  52. }else if(isIE){
  53. obj.loadXML(xml);
  54. return obj;
  55. }else if(isASV){
  56. return window.parseXML(xml, null);
  57. }
  58. }catch(e){
  59. throw new mod.ParsingFailed(xml,e);
  60. }
  61. }
  62. mod.importNode=function(importedNode, deep){
  63. deep = (deep==null) ? true : deep;
  64. var ELEMENT_NODE = 1;
  65. var ATTRIBUTE_NODE = 2;
  66. var TEXT_NODE = 3;
  67. var CDATA_SECTION_NODE = 4;
  68. var ENTITY_REFERENCE_NODE = 5;
  69. var ENTITY_NODE = 6;
  70. var PROCESSING_INSTRUCTION_NODE = 7;
  71. var COMMENT_NODE = 8;
  72. var DOCUMENT_NODE = 9;
  73. var DOCUMENT_TYPE_NODE = 10;
  74. var DOCUMENT_FRAGMENT_NODE = 11;
  75. var NOTATION_NODE = 12;
  76. var importChildren=function(srcNode, parent){
  77. if(deep){
  78. for(var i=0; i<srcNode.childNodes.length; i++){
  79. var n=mod.importNode(srcNode.childNodes.item(i), true);
  80. parent.appendChild(n);
  81. }
  82. }
  83. }
  84. var node=null;
  85. switch(importedNode.nodeType){
  86. case ATTRIBUTE_NODE:
  87. node=document.createAttributeNS(importedNode.namespaceURI, importedNode.nodeName);
  88. node.value=importedNode.value;
  89. break;
  90. case DOCUMENT_FRAGMENT_NODE:
  91. node=document.createDocumentFragment();
  92. importChildren(importedNode,node);
  93. break;
  94. case ELEMENT_NODE:
  95. node=document.createElementNS(importedNode.namespaceURI, importedNode.tagName);
  96. for(var i=0; i<importedNode.attributes.length; i++){
  97. var attr=this.importNode(importedNode.attributes.item(i), deep);
  98. node.setAttributeNodeNS(attr);
  99. }
  100. importChildren(importedNode,node);
  101. break;
  102. case ENTITY_REFERENCE_NODE:
  103. node=importedNode;
  104. break;
  105. case PROCESSING_INSTRUCTION_NODE:
  106. node=document.createProcessingInstruction(importedNode.target, importedNode.data);
  107. break;
  108. case TEXT_NODE:
  109. case CDATA_SECTION_NODE:
  110. case COMMENT_NODE:
  111. node=document.createTextNode(importedNode.nodeValue);
  112. break;
  113. case DOCUMENT_NODE:
  114. case DOCUMENT_TYPE_NODE:
  115. case NOTATION_NODE:
  116. case ENTITY_NODE:
  117. throw "not supported in DOM2";
  118. break;
  119. }
  120. return node;
  121. }
  122. mod.node2XML = function(node){
  123. var ELEMENT_NODE = 1;
  124. var ATTRIBUTE_NODE = 2;
  125. var TEXT_NODE = 3;
  126. var CDATA_SECTION_NODE = 4;
  127. var ENTITY_REFERENCE_NODE = 5;
  128. var ENTITY_NODE = 6;
  129. var PROCESSING_INSTRUCTION_NODE = 7;
  130. var COMMENT_NODE = 8;
  131. var DOCUMENT_NODE = 9;
  132. var DOCUMENT_TYPE_NODE = 10;
  133. var DOCUMENT_FRAGMENT_NODE = 11;
  134. var NOTATION_NODE = 12;
  135. var s="";
  136. switch(node.nodeType){
  137. case ATTRIBUTE_NODE:
  138. s+=node.nodeName+'="' + node.value + '"';
  139. break;
  140. case DOCUMENT_NODE:
  141. s+=this.node2XML(node.documentElement);
  142. break;
  143. case ELEMENT_NODE:
  144. s+="<" + node.tagName;
  145. for(var i=0; i<node.attributes.length; i++){
  146. s+=" " + this.node2XML(node.attributes.item(i));
  147. }
  148. if(node.childNodes.length==0){
  149. s+="/>\n";
  150. }else{
  151. s+=">";
  152. for(var i=0; i<node.childNodes.length; i++){
  153. s+=this.node2XML(node.childNodes.item(i));
  154. }
  155. s+="</" + node.tagName+ ">\n";
  156. }
  157. break;
  158. case PROCESSING_INSTRUCTION_NODE:
  159. s+="<?" + node.target + " " + node.data + " ?>";
  160. break;
  161. case TEXT_NODE:
  162. s+=node.nodeValue;
  163. break;
  164. case CDATA_SECTION_NODE:
  165. s+="<" +"![CDATA[" + node.nodeValue + "]" + "]>";
  166. break;
  167. case COMMENT_NODE:
  168. s+="<!--" + node.nodeValue + "-->";
  169. break;
  170. case ENTITY_REFERENCE_NODE:
  171. case DOCUMENT_FRAGMENT_NODE:
  172. case DOCUMENT_TYPE_NODE:
  173. case NOTATION_NODE:
  174. case ENTITY_NODE:
  175. throw new mod.Exception("Nodetype(%s) not supported.".format(node.nodeType));
  176. break;
  177. }
  178. return s;
  179. }
  180. })