使用jQuery解析XML和名称空间$()。find

问题描述:

我试图获取XML文档元素的内容,但元素中有一个冒号。

这条线适用于每一个元素,但在名称中冒号的那些:

$(this).find("geo:lat").text(); 

我认为结肠需要转义。我该如何解决?

使用反斜杠,它本身应该逃出所以JavaScript并没有吃,

$(this).find("geo\\:lat").text(); 
+4

这个不适用于Chrome :( – vaske 2012-01-16 11:52:33

+5

@Vaske,我使用jQuery的最新版本之一看到了Chrome中的相同情况,使用节点的后半部分冒号为我工作后的名字。使用`.find(“lat”)`而不是`.find(“geo \\:lat”)`并且它对我很有用。 – 2012-01-19 22:50:09

+0

@Mike是的,这有帮助,但我有命名空间问题,我返回的XML的一般问题,它包含

和<title>和chrome在这种情况下拉在一起:( – <span class="text-secondary"> <small> <a rel="noopener">vaske</a></small></span> <span>2012-01-19 23:21:59</span>

这不只是一个普通的元素名称。这是一个合格的名称,这意味着它是一个名称,专用于名称空间内的元素类型。元素类型名称是'lat',名称空间前缀是'geo'。

现在,jQuery无法很好地处理名称空间,详情请参阅bug 155

眼下,作为一种解决方法,你应该能够选择具有只是本地名以下元素:

$(this).find("lat").text(); 

如果你有相同的本地名称元素类型来区分,那么你可以使用filter()

var NS = "http://example.com/whatever-the-namespace-is-for-geo"; 
$(this).find("lat").filter(function() { return this.namespaceURI == NS; }).text(); 

编辑:我的错,我就是那个补丁已经登陆的印象。如果您需要的命名空间也利用亚当的选择建议,并filter()

var NS = "http://example.com/whatever-the-namespace-is-for-geo"; 
$(this).find("geo\\:lat").filter(function() { return this.namespaceURI == NS; }).text(); 

,如果你有镀铬或WebKit的一个jQuery选择问题不选择它尝试

$(this).find('[nodeName=geo:lat]').text(); 

这样,在所有浏览器中都能正常工作