2

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

我有以下代码读取 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>

有什么方法可以强制浏览器将新窗口中的内容呈现为 XML……或者使用 document.open 和 document.write 意味着代码被呈现为 HTML?

相关:使用 JavaScript 更改 XML 内容,缺少刷新

4

2 回答 2

4

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

window.open('data:text/xml,'+encodeURIComponent(xmlText),
     "Test", "width=300,height=300,scrollbars=1,resizable=1");
于 2014-10-11T10:04:54.943 回答
1

document.open和都document.write用于将 HTML 或 Javascript 写入文档。这可以追溯到 document.open 的DOM Level 2 规范,它假定打开文档是为了编写未解析的 HTML。

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

在这里也可以找到一个类似的问题:如何在 javascript 中显示 xml?

于 2013-05-09T12:20:44.943 回答