我有xml如下:
<item>
<title>HOUSE FIRE (NO INJURIES) - MONASH</title>
<link>http://esa.act.gov.au/feeds/currentincidents.xml</link>
<description>
Incident: HOUSE FIRE (NO INJURIES)
</description>
<guid>006782-03022013</guid>
<pubDate>04 Feb 2013 15:43:56 EST</pubDate>
<georss:point>-35.4165878527591 149.095271972785</georss:point>
</item>
DOM对象上的dojo.query是什么,用于返回georss的lat和long值:point element?
答案 0 :(得分:2)
我记得几个月前遇到过类似的问题,所以我想我一试。问题在于XML命名空间元素(&lt; georss:point&gt; ),找到其他元素很简单。
根据CSS3 Selector spec,可以使用 | 符号选择命名空间元素。所以, 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中的 * |点,点就足够了。但是,这在Internet Explorer中不起作用(我在IE8中测试过,不确定以后的版本)。在IE中,名称空间选择器是必需的。