2008-12-08 46 views
5

正如问题所述,它只是逃脱了我的记忆如何在javascript中显示xml,我想在页面上的div中显示一些源xml,它位于另一个div中xml的处理结果旁边。如何在javascript中显示xml?

不记得,如果有一个相当于JavaScript的逃生实体转换客户

注意上:将XML文件是担任从服务器,所以我需要一个客户端解决方案

注意:主要的问题是XML并不在大多数浏览器,所有的括号和属性消失正确渲染,让你用文本看起来并不像XML

回答

7

如果您希望浏览器呈现XMLXML,它必须在它自己的文件,像iframe,或frameDIV不会做这项工作!

此外,在服务于iframe的请求的HTTP标题中,您应发送Content-Type: text/xml,以便浏览器可以了解此内容为XML

但是,如果你真的需要在DIV中看到它,你将不得不自己构建一个XML渲染函数XML2HTML。如果您的XML字符串已经格式化(换行符和制表符),您可以使用HTMLPRE标签。在这种情况下,您必须将<替换为XML字符串中的&gt;

结论:The browser无法在同一文档中呈现XMLHTML。如果你需要它,你只需要解决它。

1

一种技术是使用两个IFRAME设置为从所述服务器提供的相应的XML文件中的src属性的元素(假设它是通过一个虚拟目录曝光):

<iframe src="/myapp/Document1.xml"><iframe src="/myapp/Document2.xml"> 

或者,也可能使用AJAX类型请求来检索XML文档和然后将它们嵌入在HTML文档中动态地使用类似:

getElementById("myDiv").innerText = ajax.response; 
+0

问题XML不会在大多数浏览器正确地呈现,所有的括号和属性消失,留下的文字看起来不像xml – 2008-12-08 11:45:36

+0

这两种技术都应该很好地显示它。请注意,第二种技术使用“innerText”而不是“innerHTML”,否则将会出现您所描述的内容。 – 2008-12-08 11:52:44

+0

是的你是对的,没有注意到那里的“innerText”:) – 2008-12-08 11:59:30

7

这里有一个功能你:

<script type="text/javascript"> 
<!-- 
    function xml_to_string(xml_node) 
    { 
     if (xml_node.xml) 
      return xml_node.xml; 
     else if (XMLSerializer) 
     { 
      var xml_serializer = new XMLSerializer(); 
      return xml_serializer.serializeToString(xml_node); 
     } 
     else 
     { 
      alert("ERROR: Extremely old browser"); 
      return ""; 
     } 
    } 

    // display in alert box 
    alert(xml_to_string(my_xml)); 

    // display in an XHTML element 
    document.getElementById("my-element").innerHTML = xml_to_string(my_xml); 
--> 
</script> 
6

如果您不想仅为此使用整个JavaScript框架...

function insertLiteral(literalString, targetElement) 
{ 
    var textNode = document.createTextNode(literalString); 
    targetElement.appendChild(textNode) 
    return textNode; 
} 

// test it (for the example, I assume #targetDiv is there but empty) 
var xmlString = "<this><is_some><xml with='attributes' /></is_some></this>"; 
var targetElement = document.getElementById("targetDiv"); 
var xmlTextNode = insertLiteral(xmlString, targetElement); 

#targetDiv可以利用CSS定义样式:

#targetDiv { 
    font-family: fixed; 
    white-space: pre; 
} 
12

使用Ajax获取您的XML和简单地把结果在textarea。以任何你想要的方式来设置textarea。

1

这是我发现显示XML作为同一页面上的文本复制和粘贴的最简单的方法:

var xml = document.getElementById('svg_element').innerHTML; 
document.getElementById('svg_pre').innerText = xml;