我记得几个月前遇到过类似的问题,所以我想试试这个。问题在于 XML 命名空间元素 ( <georss:point> ),查找其他元素很简单。
根据CSS3 选择器规范,可以使用|选择命名空间元素。象征。因此,georss|point应该是正确的选择器。但是,您需要事先向选择器引擎声明此命名空间。我不知道如何使用dojo/query来做到这一点。
一种解决方法是使用*来表示任何命名空间;因此,*|point将起作用。但是,它会在文档中找到任何命名空间的任何点元素。在大多数情况下,这不会是一个问题。
例如。
<script type="text/javascript">
require([
"dojo/query",
"dojo/request",
"dojo/dom-attr"
], function($, request, domAttr){
request("test.xml", {
"preventCache": true,
"handleAs": "xml"
}).then(function(xmldom){
var georss = $("*|point", xmldom.documentElement);
if(georss.length > 0){ // ensure we have our element
console.log("georss:point", georss[0]); // Test code
var latLng = domAttr.get(georss[0], "innerHTML").split(" ");
}
}, function(err){
console.error(err);
});
});
</script>
如果获取所有命名空间会导致问题,那么您可以根据它们的namespaceURI属性过滤节点。
可能有人知道如何将命名空间传递给 dojo/query,这会使它变得更好。如果 Dojo 还没有包含它,它应该是选择器引擎的一个特性。
编辑:看来您在 Chrome、Firefox 或 Opera 中都不需要*|point ,点就足够了。但是,这在 Internet Explorer 中不起作用(我在 IE8 中测试过,不确定更高版本)。在 IE 中,命名空间选择器是必需的。