我正在尝试解析类似XML的String,看起来像这样:
<note>
<user>Username 1</user>
<notes>Notes user wrote</notes>
</note>
<note>
<user>Username 2</user>
<notes>Notes user wrote</notes>
</note>
我对如何使用JQuery XML解析器感到有点困惑,我想我习惯使用SQL编程来访问数据。
我想要做的是根据用户名打印出笔记
所以在SQL中,它是“SELECT notes FROM FROM WHERE user ='Username 1'”
如何在JQuery XML Parser中进行选择?
编辑我正在尝试的内容:
由于某些原因,这会一直返回Null:
var xml = '<url>urlofpage1</url><notes>These notes should load!</notes>';
var $xml = $(xml);
var $notes = $xml.find('url')
.filter(function() { return $(this).text() == 'urlofpage1' })
.closest('notes');
console.log('$notes: ', $notes.html());
答案 0 :(得分:1)
首先你需要一个jQuery对象:
var xml = '<note><user>Username 1</user><notes>Notes user wrote</notes></note><note><user>Username 2</user><notes>Notes user wrote</notes></note>';
var $xml = $(xml);
然后,您可以使用find
和:contains
selector找到您想要的特定<user>
,然后使用closest
返回<note>
:< / p>
var $notes = $xml.find('user:contains("Username 1")').closest('note');
例如(在控制台打开的情况下运行):http://jsfiddle.net/ambiguous/3Yqqu/
你必须小心:contains
选择器,但是:
匹配文本可以直接显示在所选元素中,任何元素的后代中,或其组合中。
因此user:contains
(一个狭窄的搜索)后跟closest
重新开始。如果您正在寻找严格的平等而不是喜欢LIKEish,那么您可能需要添加额外的filtering step:
var $notes = $xml.find('user')
.filter(function() { return $(this).text() == 'Username 1' })
.closest('note');
这是一个例子(控制台请再次打开):http://jsfiddle.net/ambiguous/fYNXx/
这种想法类似于SQL,因为大部分时间你都在使用集合。但是,在shell管道意义上,您经常将事物链接在一起,而不是嵌套查询,子选择和派生表。
答案 1 :(得分:1)
编辑1
mu太短了,答案看起来更干净了,我会选择那个
编辑2
那不太对劲。这有效;你可以看到例子fiddle。
function getNotesByUser(xml, username){
var notes
$(xml).siblings('note').each(function(){
if($(this).find('user').text() == username){
notes = $(this).find('notes');
return false; //break early
}
});
return notes;
}
var xml = "<note><user>Username 1</user><notes>Notes user wrote</notes></note><note><user>Username 2</user><notes>Notes user2 wrote</notes></note>";
alert(getNotesByUser(xml, "Username 1").text());
alert(getNotesByUser(xml, "Username 2").text());