如何在javascript中显示xml?

如何在javascript中显示xml?,javascript,xml,Javascript,Xml,正如问题所说,我不记得如何在javascript中显示xml,我想在页面上的一个div中显示一些源xml,它位于另一个div中xml处理结果的旁边 不记得是否有一个等价于javascript的转义来转换客户端上的实体 注意:xml文件从服务器按原样提供,因此我需要一个客户端解决方案 注意:主要问题是XML在大多数浏览器中无法正确呈现,所有括号和属性都会消失,留下看起来不像XML的文本一种技术是使用两个iframe元素,并将src属性设置为服务器提供的相应XML文件(假设它是通过虚拟目录公开的):

正如问题所说,我不记得如何在javascript中显示xml,我想在页面上的一个div中显示一些源xml,它位于另一个div中xml处理结果的旁边

不记得是否有一个等价于javascript的转义来转换客户端上的实体

注意:xml文件从服务器按原样提供,因此我需要一个客户端解决方案


注意:主要问题是XML在大多数浏览器中无法正确呈现,所有括号和属性都会消失,留下看起来不像XML的文本

一种技术是使用两个iframe元素,并将src属性设置为服务器提供的相应XML文件(假设它是通过虚拟目录公开的):

如果您希望浏览器将您的
XML
呈现为
XML
,则它必须位于自己的文档中,如
iframe
,否则
frame
DIV将无法完成此任务

此外,在为
iframe
提供服务的请求的
HTTP
标题中,您应该发送
内容类型:text/xml
,以便浏览器能够理解此内容是
xml


但是,如果您真的需要在DIV中看到它,您必须为自己构建一个
XML
呈现函数
XML2HTML
。如果您的
XML
字符串已经格式化(换行符和制表符),您可以使用
HTML
标记进行此操作。在这种情况下,您必须替换
以下函数:

<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>

问题是您必须转义HTML解析器将解释为标记的字符:、&,在某些情况下还有“and”

核心JavaScript没有为您提供这一功能,但许多附加库都提供了这一功能


例如,Prototype有:

当您不想仅仅为此使用整个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);

使用Ajax获取您的XML,并将结果简单地放入
textarea
。根据需要设置textarea的样式。

这是我发现的在同一页面上以文本形式显示XML以便复制和粘贴的最简单方法:

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

问题是XML在大多数浏览器中不能正确呈现,所有括号和属性都消失了,留下的文本看起来不像XML。这两种技术都应该可以很好地显示它。请注意,第二种技术使用“innerText”而不是“innerHTML”,否则将发生您描述的情况。另外请注意,如果您希望在将XML发送到客户端之前将其嵌入HTML文档,则可以利用ASP(假定为IIS服务器)要对xml进行编码,使其正确显示,请使用如下内容:@Daniel:True,使用document.createTextNode可能是一种更兼容跨浏览器的方式。Internet Explorer可以在同一文档中呈现xml和HTML,只需将xml嵌入标记中。我认为这不是一种建议,因为它是不受欢迎的(当然,这只适用于IE),仅供参考。还请注意,假设XML编码正确,DIV可以很好地显示XML。至少,我建议编码>(>),<(来自Mozilla开发者中心:“XMLSerializer主要用于基于Mozilla平台的应用程序和扩展。虽然它可用于网页,但它不是任何标准的一部分,其他浏览器的支持级别未知。XMLSerializer本身不能在所有浏览器中工作,因此使用了if语句。该函数应该在所有浏览器中工作,至少在所有现代浏览器(MSIE6+等)中工作函数是返回HTML编码的XML,还是仅返回XML字符串?我相信将innerHTML设置为XML字符串会导致OP试图解决的呈现问题。这是最好的答案。例如,一种样式的XML是如何实现的?这对我来说是可行的,它将.innerHTML重新设置为.innerText,它接受XML/HTML
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 {
  font-family: fixed;
  white-space: pre;
}
var xml = document.getElementById('svg_element').innerHTML;
document.getElementById('svg_pre').innerText = xml;