逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
一,<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>
posted on 2010-08-01 11:09 逛奔的蜗牛 阅读(2450) 评论(1)  编辑 收藏 引用 所属分类: 其他编程

评论

# re: jQuery:jQuery处理CDATA 2012-08-17 23:04 aaa
ds  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理