javascript - 将 XML 文档(通过 ajax 调用获得)渲染到新窗口

标签 javascript jquery xml ajax xslt

您好,我正在寻找一种方法来将我使用 ajax 检索的 XML 文档呈现到新的浏览器窗口。

我正在使用 JQuery 的 ajax() 函数将 JSON 数据发布到 MVC Controller 。 Controller 将 XML 作为字符串返回。

我正在使用 window.open() 在 javascript 中创建一个新窗口并通过调用设置文档内容。

newwindow.document.clear();
newwindow.document.            
newwindow.document.write(jqXHR.responseText);
newwindow.document.close();

(其中 jqXHR.responseText 是从 ajax() 调用返回的 XML。)

新窗口按预期打开,如果我在页面上查看源代码,我会看到我的 XML。但是(您知道有人来了)浏览器窗口中什么也没有出现。显然,如果我将页面源保存到磁盘并打开,输出将按预期呈现。

谁能提出解决方案? 重申一下我的主要目标是将 XML 文档(通过 ajax 调用获得)呈现到新窗口。

我还应该补充一点,我希望看到由 XSLT 转换的输出。我的 XML 有这个处理指令。 非常感谢

编辑---------------------------- 我采用的解决方案 ------ ------------------

感谢大家的意见和建议。

我最终采用的解决方案是创建一个带有 target="_blank"的表单,然后我将 JSON 作为隐藏字段写入表单,并将其发布到返回 XML 的 Controller (由 JSON 构建).当从响应中返回 XML 时,浏览器将其标记为预期的。我想这不是对原始问题的回答。但是 Gabby 在下面有一个解决方案。

最佳答案

以下仅适用于 FireFoxOpera,但我认为值得一提..

window.open('data:text/xml,' + encodeURIComponent( jqXHR.responseText ) );

应该也可以与 chrome 一起使用,但它似乎对 window.open 的处理方式与通常的 URL 不同。如果您只是在 chrome 中输入结果 url,它也可以在那里工作。


更新 这适用于所有浏览器!

关键是 javascript 可以使用 xslt 转换 xml。
但不是自动的,所以我们需要找到 XML 文件以引用 XSLT 文件并加载它。然后我们可以在 javascript 中进行转换并将生成的 html 传递到新窗口。

自然地,IE 处理事情的方式与其他浏览器不同。

$.get('xml-file-here.xml',
   function(xmlData){
                  var xml = xmlData;

                  //extract the stylesheet so we can load it manually
                  var stylesheet;
                   for (var i=0;i<xml.childNodes.length;i++){
                       if ( xml.childNodes[i].nodeName =='xml-stylesheet' )
                       {
                        stylesheet = xml.childNodes[i].data;
                       }
                   }
                  var items = stylesheet.split('=');
                  var xsltFile = items[items.length-1].replace(/"/g,'');

                  //fetch xslt manually
                  $.get( xsltFile, function(xsltData){
                      var xslt = xsltData;
                      var transformed;

                      if (! window['XSLTProcessor'])
                        {
                            // Trasformation for IE
                            transformed = xml.transformNode(xslt);
                        }
                        else
                        {
                            // Transformation for non-IE
                            var processor = new XSLTProcessor();
                            processor.importStylesheet(xslt);
                            var xmldom = processor.transformToDocument(xml);
                            var serializer = new XMLSerializer();
                            var transformed = serializer.serializeToString(xmldom.documentElement);
                        }

                      var newwindow = window.open();
                      newwindow.document.open();
                      newwindow.document.write(transformed);
                      newwindow.document.close();
                  });
   });

关于javascript - 将 XML 文档(通过 ajax 调用获得)渲染到新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581592/

相关文章:

javascript - JQuery/CSS 气泡鼠标悬停

java - XML 解析 - 搜索特定元素

java - JAXB - 如何在绑定(bind) Java 类中指定 xml 属性

javascript - 如何从 am XML 文件中提取数据并将其显示在 html 表上

数组上的 javascript 验证未运行

javascript - 从后面开始拆分字符串

javascript - 如何使用 Pusher 将用户的存款和取款详细信息从客户端发送到 Node.js (express) 服务器?

javascript - 使用 javascript 和 MathJax 将数学公式字符串添加到文档

javascript - html/javascript - 去饱和/灰度图像翻转而不创建图像副本或 Sprite

javascript - 如何通过增加输入数字来动态更改价格