XslTransform.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:5k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.xml.XslTransform");
  9. dojo.xml.XslTransform = function (xsltUri) {
  10. dojo.debug("XslTransform is supported by Internet Explorer and Mozilla, with limited support in Opera 9 (no document function support).");
  11. var IS_IE = dojo.render.html.ie;
  12. var ACTIVEX_DOMS = ["Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", "Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"];
  13. var ACTIVEX_FT_DOMS = ["Msxml2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0"];
  14. var ACTIVEX_TEMPLATES = ["Msxml2.XSLTemplate.5.0", "Msxml2.XSLTemplate.4.0", "MSXML2.XSLTemplate.3.0"];
  15. function getActiveXImpl(activeXArray) {
  16. for (var i = 0; i < activeXArray.length; i++) {
  17. try {
  18. var testObj = new ActiveXObject(activeXArray[i]);
  19. if (testObj) {
  20. return activeXArray[i];
  21. }
  22. }
  23. catch (e) {
  24. }
  25. }
  26. dojo.raise("Could not find an ActiveX implementation in:nn " + activeXArray);
  27. }
  28. if (xsltUri == null || xsltUri == undefined) {
  29. dojo.raise("You must pass the URI String for the XSL file to be used!");
  30. return false;
  31. }
  32. var xsltDocument = null;
  33. var xsltProcessor = null;
  34. if (IS_IE) {
  35. xsltDocument = new ActiveXObject(getActiveXImpl(ACTIVEX_FT_DOMS));
  36. xsltDocument.async = false;
  37. } else {
  38. xsltProcessor = new XSLTProcessor();
  39. xsltDocument = document.implementation.createDocument("", "", null);
  40. xsltDocument.addEventListener("load", onXslLoad, false);
  41. }
  42. xsltDocument.load(xsltUri);
  43. if (IS_IE) {
  44. var xslt = new ActiveXObject(getActiveXImpl(ACTIVEX_TEMPLATES));
  45. xslt.stylesheet = xsltDocument;
  46. xsltProcessor = xslt.createProcessor();
  47. }
  48. function onXslLoad() {
  49. xsltProcessor.importStylesheet(xsltDocument);
  50. }
  51. function getResultDom(xmlDoc, params) {
  52. if (IS_IE) {
  53. addIeParams(params);
  54. var result = getIeResultDom(xmlDoc);
  55. removeIeParams(params);
  56. return result;
  57. } else {
  58. return getMozillaResultDom(xmlDoc, params);
  59. }
  60. }
  61. function addIeParams(params) {
  62. if (!params) {
  63. return;
  64. }
  65. for (var i = 0; i < params.length; i++) {
  66. xsltProcessor.addParameter(params[i][0], params[i][1]);
  67. }
  68. }
  69. function removeIeParams(params) {
  70. if (!params) {
  71. return;
  72. }
  73. for (var i = 0; i < params.length; i++) {
  74. xsltProcessor.addParameter(params[i][0], "");
  75. }
  76. }
  77. function getIeResultDom(xmlDoc) {
  78. xsltProcessor.input = xmlDoc;
  79. var outDoc = new ActiveXObject(getActiveXImpl(ACTIVEX_DOMS));
  80. outDoc.async = false;
  81. outDoc.validateOnParse = false;
  82. xsltProcessor.output = outDoc;
  83. xsltProcessor.transform();
  84. if (outDoc.parseError.errorCode != 0) {
  85. var err = outDoc.parseError;
  86. dojo.raise("err.errorCode: " + err.errorCode + "nnerr.reason: " + err.reason + "nnerr.url: " + err.url + "nnerr.srcText: " + err.srcText);
  87. }
  88. return outDoc;
  89. }
  90. function getIeResultStr(xmlDoc, params) {
  91. xsltProcessor.input = xmlDoc;
  92. xsltProcessor.transform();
  93. return xsltProcessor.output;
  94. }
  95. function addMozillaParams(params) {
  96. if (!params) {
  97. return;
  98. }
  99. for (var i = 0; i < params.length; i++) {
  100. xsltProcessor.setParameter(null, params[i][0], params[i][1]);
  101. }
  102. }
  103. function getMozillaResultDom(xmlDoc, params) {
  104. addMozillaParams(params);
  105. var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
  106. xsltProcessor.clearParameters();
  107. return resultDoc;
  108. }
  109. function getMozillaResultStr(xmlDoc, params, parentDoc) {
  110. addMozillaParams(params);
  111. var resultDoc = xsltProcessor.transformToFragment(xmlDoc, parentDoc);
  112. var serializer = new XMLSerializer();
  113. xsltProcessor.clearParameters();
  114. return serializer.serializeToString(resultDoc);
  115. }
  116. this.getResultString = function (xmlDoc, params, parentDoc) {
  117. var content = null;
  118. if (IS_IE) {
  119. addIeParams(params);
  120. content = getIeResultStr(xmlDoc, params);
  121. removeIeParams(params);
  122. } else {
  123. content = getMozillaResultStr(xmlDoc, params, parentDoc);
  124. }
  125. return content;
  126. };
  127. this.transformToContentPane = function (xmlDoc, params, contentPane, parentDoc) {
  128. var content = this.getResultString(xmlDoc, params, parentDoc);
  129. contentPane.setContent(content);
  130. };
  131. this.transformToRegion = function (xmlDoc, params, region, parentDoc) {
  132. try {
  133. var content = this.getResultString(xmlDoc, params, parentDoc);
  134. region.innerHTML = content;
  135. }
  136. catch (e) {
  137. dojo.raise(e.message + "nn xsltUri: " + xsltUri);
  138. }
  139. };
  140. this.transformToDocument = function (xmlDoc, params) {
  141. return getResultDom(xmlDoc, params);
  142. };
  143. this.transformToWindow = function (xmlDoc, params, windowDoc, parentDoc) {
  144. try {
  145. windowDoc.open();
  146. windowDoc.write(this.getResultString(xmlDoc, params, parentDoc));
  147. windowDoc.close();
  148. }
  149. catch (e) {
  150. dojo.raise(e.message + "nn xsltUri: " + xsltUri);
  151. }
  152. };
  153. };