2012-11-15 67 views
1
<?xml version="1.0" encoding="ISO-8859-1"?> 
<bookstore> 
<book category="cooking"> 
<page> 
<uri>http://www.somepage.com/page1.html</uri> 
<content><![CDATA[<script>alert("Hello");</script>]]></content> 
</page> 
<title lang="en">Everyday Italian</title> 
<author>Giada De Laurentiis</author> 
<year>2005</year> 
<price>30.00</price> 
</book> 
</bookstore> 

假設我想使用javascript解析xml。使用javascript解析xml與CDATA部分 - 阻止腳本執行

<!DOCTYPE html> 
<html> 
<body> 
<script> 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.open("GET","books.xml",false); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 

txt=xmlDoc.getElementsByTagName("content")[0].childNodes[0].nodeValue; 
document.write(txt); 
</script> 
</body> 
</html> 

輸出是一個警報框,其中消息爲Hello。我不希望腳本執行。

而不是xmlDoc.getElementsByTagName(「content」)[0] .childNodes [0] .nodeValue; 我能做些什麼來得到的輸出爲:

<script>alert("Hello");</script> 
+0

'xmlDoc.getElementsByTagName( 「內容」)[0] .childNodes [0] .nodeValue'是完美的。 UPVOTED! :) –

回答

2

不要document.write它 - 這會將其作爲HTML,而不是文字。

使用createTextNode然後appendChild結果在DOM中的某處。

0

我想你可能會使用這樣的:

var config = new ActiveXObject("Microsoft.XMLDOM"); config.async = false; config.loadXML(xmlhttp.responseText); var read = config.selectNodes("//bookstore/book/page/content")[0]; alert(read);