2008-12-08 76 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;