使用window.open,document.open和document.write显示XML(XML渲染消失)

时间:2013-05-09 11:40:26

标签: javascript xml dom window

这与另一个问题有关,但重复。 它涉及一个我陷入僵局的建议解决方案。

我有以下代码读取XML,进行更改,打开窗口,并将XML写入文档。问题是内容不会呈现为XML。 设置内容类型等的任何方式,让浏览器将内容处理为XML?

<script>
var wxml;
var xDoc;
var xDevices, xInputs;
var xDevice, xInput;

    function fSetXmlAInput(iDevice, iNode, nodeNewVal) {
      xInput = xInputs[iNode];
      xValue = xInput.getElementsByTagName("value")[0];

      // change node value:
      // console.log("nodeVal: " + xValue.firstChild.nodeValue);
      xValue.firstChild.nodeValue = nodeNewVal;
      // console.log("newVal: " + xValue.firstChild.nodeValue);
    }

    function fSetXmlDevice(iDevice) {
      xDevice = xDevices[iDevice];
      xInputs = xDevice.getElementsByTagName("input");
        fSetXmlAInput(iDevice, 0, "22");
        fSetXmlAInput(iDevice, 1, "33");
    }

    function alternativeLoadXML3() {
        // load xml file
        if (window.XMLHttpRequest) {
            xhttp = new XMLHttpRequest();
        } else { // IE 5/6
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }

        xhttp.open("GET", "my_template.xml", false);
        xhttp.send();

        xDoc = xhttp.responseXML;
        xDevices = xDoc.getElementsByTagName("device");
        fSetXmlDevice(1);

        var xmlText = serializeXmlNode(xDoc);

        var newWindow = window.open("my_template.xml", "Test", "width=300,height=300,scrollbars=1,resizable=1");
        newWindow.document.open();
        newWindow.document.write(xmlText);
        newWindow.document.close()
    };

</script>

在XML下面:

<?xml version="1.0" encoding="utf-8"?>
<myXmlRoot>
<device>
  <input><name>"name 1"</name><value>{replaceMe!}</value></input>
  <input><name>"name 2"</name><value>{replaceMe!}</value></input>  
</device>
<device>
  <input><name>"name 1"</name><value>{replaceMe!}</value></input>
  <input><name>"name 2"</name><value>{replaceMe!}</value></input>  
</device>
<device>
  <input><name>"name 1"</name><value>{replaceMe!}</value></input>
  <input><name>"name 2"</name><value>{replaceMe!}</value></input>  
</device>
</myXmlRoot>

任何强制浏览器以新的方式在新窗口中呈现内容的方法......或者使用document.open和document.write意味着代码是否呈现为HTML?

相关:Change XML content using JavaScript, missing refresh

2 个答案:

答案 0 :(得分:3)

使用dataURI将xml写入新窗口非常容易。

window.open('data:text/xml,'+encodeURIComponent(xmlText),
     "Test", "width=300,height=300,scrollbars=1,resizable=1");

答案 1 :(得分:1)

document.opendocument.write都用于将HTML或Javascript写入文档。这可以追溯到DOM Level 2 Specification of document.open,它假设打开文档以编写未解析的HTML。

而不是使用document.opendocument.write,而是建议使用XML DOM动态添加元素,如sampleElement.appendChild(XMLnode)

此处也可以找到类似的问题:how to display xml in javascript?