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