一,<root><name><![CDATA[Biao<you>]]></name><age>23</age></root>
上面的XML使用了CDATA來處理特殊字符,如果是在JS的字符串,然后使用$轉換成jQuery對象,在訪問name的時候會有錯誤,這是因為jQuery沒有提供對XML的本地支持。
但是上面的內容如果是從服務器傳過來的“text/xml"內容,那么使用$轉換成jQuery對象后,可以正常的訪問name。
區別在于是本地的字符串還是服務器返回來時指定的xml內容。
服務器端
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String xml = "<root>"
+ "<name><![CDATA[Biao<you>]]></name>"
+ "<age>123</age>"
+ "</root>";
System.out.println("Request xml");
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println(xml);
}
瀏覽器端
<script type="text/javascript">
$(function() {
$.get("xmltest", function(xmlData) {
var name = $("name", $(xmlData)).text();
console.log(name);
});
});
</script>
二,把字符串的xml轉換成DOM來解決CDATA問題:
<script type="text/javascript">
jQuery.createXMLDocument = function(string) {
var browserName = navigator.appName;
var doc;
if (browserName == 'Microsoft Internet Explorer') {
doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async = 'false'
doc.loadXML(string);
} else {
doc = (new DOMParser()).parseFromString(string, 'text/xml');
}
return doc;
}
$(function() {
var xml = '<person>'
+ '<root><name><![CDATA[Biao<you>]]></name><age>23</age></root>';
+ '</person>';
var doc = $($.createXMLDocument(xml));
console.log($("name", doc).text());
});
</script>