使用 jQuery 在浏览器中处理 XML
2010-01-20 00:00:00 来源:WEB开发网XML 名称空间的问题
我将首先介绍最严重的问题。jQuery 并不能完全解决 XML 名称空间问题。这个众所周知的问题由来已久,人们尝试了各种解决方案,但结果都不太令人满意。理想的解决方案可能是利用 jQuery 支持 CSS Level 3 名称空间选择器,它将添加一个新的选择器,如下所示:
@namespace ex url(http://example.com);
ex|quote { font-weight: bold }
第一行是 http://example.com 名称空间的前缀声明,第二行是一种使用新的名称空间组件的类型选择器,其中用竖线符号分隔已声明的前缀和本地名称。不幸的是,jQuery 并不支持这种方法,因此人们采取了各种方法来处理名称空间问题。
伪装前缀的重要性
一种最常见的黑客方法是在 jQuery 中处理 XML 和名称空间时忽略名称空间,并选择完整的 qname(前缀和本地部分)。
$(xml).find("x\\:quote").each(function() {
//process each node
});
该代码通过 jQuery 的节点名称概念选择,即 DOM nodeName 属性。它包含一个冒号,是 jQuery 选择器保留的符号,并且必须使用反斜杠进行转义。反斜杠是 JavaScript 脚本保留的符号并且必须是一对。这种黑客方法在使用不同前缀的名称空间等效文档中无法使用。
使用属性过滤器
据说有人成功地使用过以下方法的变体,即在伪属性 nodeName 上使用 jQuery 属性过滤器:
$(xml).find("[nodeName=x:quote]").each(function() {
//process each node
});
使用 jQuery 1.3.x 之前的版本,您需要在 nodeName 前面加上 @。但是,这样做与上一节 伪装前缀的重要性 中提到的方法有着相同的基本问题。它将破坏许多真实的名称空间场景。我尝试了以下变体,这种方法更合理:
更多精彩
赞助商链接