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

3
我知道由于安全限制,我无法将XML内容保存到本地文件中。但是,是否有一种方法可以在另一个浏览器窗口中显示XML内容?
Window.Open(xmlString, . .. );

这将与“-”起到相同的作用。

Window.Open(URL, . . .);

编辑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();

2个回答

1
您可以打开一个空白窗口,然后按照以下方式编写内容:
myWindow=window.open('','','width=200,height=100')
myWindow.document.write(xmlString);
myWindow.focus()

您可能需要一些工作来格式化您的xmlString,但我认为这种方法可以实现您想要的功能。如果您的xmlString已经格式化,请尝试添加:

<?xml version="1.0" ?>

将此字符串添加到您的字符串开头。

尝试在字符串开头添加 <?xml version="1.0" ?>。 - SteveP
我已经添加了它,但仍然得到相同的结果 - 只有内部节点的值,并且页面没有“完成”。 - Atara

0

根据您的帖子,我的理解是:

1.(从您的第一个观点) 您从某个不受您控制的地方获取了XML。 我的建议是,为什么不将其作为JSON获取?

2.(从您的第二个观点) 如果这些XML是由您创建的,请尝试从参考中编写这些XML。 例如:

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

3.(从您的第三点) 根据我从您的第二点所理解的,您可以创建XML。那么为什么在编写文档后要进行更改呢?

注意:通常XML用于服务器之间的通信,JSON用于服务器与客户端(浏览器)之间的通信。


客户要求生成XML而不是JSON。我可以使用模板,但需要使用当前值进行更新。请参见我的编辑1。 - Atara
1
为什么不使用“textarea”?而且你可以通过JavaScript轻松控制它。reference.document.write('<textarea><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></textarea>') - HILARUDEEN S ALLAUDEEN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接