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

时间:2011-04-07 13:09:24

标签: javascript jquery xml ajax xslt

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

我正在使用JQuery的ajax()函数将JSON数据发布到MVC控制器。控制器将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(由JSON构造) )。当从响应返回XML时,浏览器按预期标记它。我想这不是原始问题的答案。但是Gabby在下面有一个解决方案。

5 个答案:

答案 0 :(得分:7)

以下内容仅适用于 FireFox Opera ,但我认为值得一提.. < / p>

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

也应该使用chrome,但它似乎与常规网址不同地处理window.open ..如果您只是在Chrome中输入生成的网址,那么它也能在那里工作..


更新 适用于所有浏览器!

问题是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();
                  });
   });

答案 1 :(得分:0)

您必须将弹出窗口设置为Content-type: text/xml,并使用<?xml version="1.0" encoding="UTF-8"?>开始弹出窗口

答案 2 :(得分:-1)

你可能会丢失一个流行语,但为什么不打开一个指向控制器URL的窗口呢?

答案 3 :(得分:-1)

将XML写入textarea。使用CSS为textarea设置样式。

答案 4 :(得分:-1)

浏览器渲染html。 IE和其他一些人用格式打开xml文件,但这不是浏览器的默认行为 - 所以你不应该依赖它。对我来说更好的解决方案是建议下载文件,用户将决定何时保存文件或打开文件。 但是如果您不想下载文件,则需要从xml生成html。这是你应该进行一些格式化的情况,为它添加css样式以使用户更友好和可读。要实现这一点,最好的方法是使用Xsl Transformation从xml生成输出html。这将是直接从xml生成html的最优雅方式。但是如果你也不想要这个,并且你真的不关心用户体验,你可以使用一些文本元素(p,span等)并将xml直接写入新窗口,但是在这个元素的文本中。这样你的xml就会按原样显示