使用 JavaScript 在另一个窗口中打开 XML 内容

Posted

技术标签:

【中文标题】使用 JavaScript 在另一个窗口中打开 XML 内容【英文标题】:Open XML content in another window, using JavaScript 【发布时间】:2013-02-27 17:36:52 【问题描述】:

我了解由于安全限制,我无法将 XML 内容保存到本地文件。但是有没有办法可以在另一个浏览器窗口中显示 XML 内容,如

Window.Open(xmlString, . .. );

这将与 -

Window.Open(URL, . . .);
我无法使用服务器端语言。 我可以使用 javascript\jQuery。 (我已经使用它们来创建 XML) 我可以在我的 html 附近有一个模板 XML 文件。有没有办法显示模板文件并更改其内容?与window.open: is it possible open a new window with modify its DOM 或How to write JavaScript to a separate window? 几乎相同,但我需要更改 XML 节点,而不是 HTML。

编辑 1:尝试使用 myXmlWindow.document.write(xmlString)

=> 我尝试了建议的代码 -

    var xmlString = xml2Str(xmlDocument);
    myXmlWindow = window.open();
    myXmlWindow.document.write(xmlString);
    myXmlWindow.focus();

但它不显示整个 XML 内容,只显示内部节点值。并且新窗口仍然显示“正在连接...”,因为它没有完成加载内容(缺少关闭标签???)

也许我需要告诉它是 XML 内容而不是 HTML ???

我的 xmlString :

<root><device1>Name</device1><device2/><device3><Temprature_1>23.5</Temprature_1><Temprature_2>23.4</Temprature_2><Temprature_3>23.4</Temprature_3><Temprature_4>23.3</Temprature_4><Temprature_5>23.2</Temprature_5></device3></root>

显示的内容:

Name23.523.423.423.323.2

编辑 2:我的代码 -

function xml2Str(xmlNode) 
   try 
      // Gecko- and Webkit-based browsers (Firefox, Chrome), Opera.
      return (new XMLSerializer()).serializeToString(xmlNode);
  
  catch (e) 
     try 
        // Internet Explorer.
        return xmlNode.xml;
     
     catch (e) 
        //Other browsers without XML Serializer
        // alert('Xmlserializer not supported');
        return('Xmlserializer not supported');
     
   
   return false;



    function fShow_xml_in_win() 

        var xmlDocument = $.parseXML("<root/>");
        var dev1 = xmlDocument.createElement('device1');
        var dev2 = xmlDocument.createElement('device2');
        var dev3 = xmlDocument.createElement('device3');
        dev1.appendChild(xmlDocument.createTextNode('Name'));
        xmlDocument.documentElement.appendChild(dev1);
        xmlDocument.documentElement.appendChild(dev2);
        xmlDocument.documentElement.appendChild(dev3);

            var i;
            var xNode;
            for (i = 0; i < 5; i++) 
              xNode = xmlDocument.createElement('Temprature_' + (i+1));
              xNode.appendChild(xmlDocument.createTextNode( "myVal " + ((i+1) * 10) ));
              dev3.appendChild(xNode);
            

        var xmlString = xml2Str(xmlDocument);

        alert(xmlString);

        xmlString = "<?xml version='1.0' ?>" + xmlString;  // I do not know how to add this node using parseXML :(
        alert(xmlString);

        myXmlWindow = window.open();
        myXmlWindow.document.write(xmlString);
        myXmlWindow.document.close();  // !! EDIT 3
        myXmlWindow.focus();

            return false;
    

编辑 3:解决了“连接...”问题

我只需要添加 myXmlWindow.document.close();

【问题讨论】:

【参考方案1】:

您可以打开一个空白窗口,然后向其中写入内容,如下所示:

myWindow=window.open('','','width=200,height=100')
myWindow.document.write(xmlString);
myWindow.focus()

您可能需要做一些工作来格式化您的 xmlString,但我认为这种方法可以满足您的需求。如果您的 xmlString 已格式化,请尝试添加:

<?xml version="1.0" ?>

到字符串的开头。

【讨论】:

尝试将 添加到字符串的开头。 我添加了它,但结果仍然相同 - 只有内部节点值,并且页面未“完成”【参考方案2】:

从你的帖子我的理解是

1.(从你的第一点开始) 您从不受您控制的地方获取 xml。我的建议是你为什么不获取 JSON?

2.(从你的第二点开始) 如果这些 XML 是由您创建的,您为什么不尝试从参考中编写这些 XML? 例如:

 var reference = window.open();
 reference.document.write(<some string goes here>)

3.(从你的第三点开始) 根据您的第二点的理解。您可以创建 xml。那你为什么在写完文档后就变了?

注意:一般 XML 用于服务器到服务器的通信,JSON 用于服务器到客户端(浏览器)的通信。

【讨论】:

我需要生成 XML 而不是 JSON - 客户端请求。我可以使用模板,但我需要用当前值更新它。请看我的编辑 1 为什么不使用“textarea”。你可以通过javascript轻松控制它。 reference.document.write('')

以上是关于使用 JavaScript 在另一个窗口中打开 XML 内容的主要内容,如果未能解决你的问题,请参考以下文章

与在另一个窗口中打开的组件交互

单个 Qt 应用程序可以在多个 X 显示器上打开窗口吗?

emacs中,怎么样将文件列表中的文件在另一个窗口打开?

javaScript防止拦截新窗口打开页面

使用模态弹出窗口在另一个 aspx 页面中显示 aspx 页面

在Javascript / Jquery中不在浏览器上打开它来执行URL