XML和JQuery的问题

时间:2011-05-17 14:32:17

标签: javascript jquery xml

假设我有两个XML内部字符串。像这样:

<playlist>
    <item id="1">
        ...
    </item>
</playlist>

<playlist>
    <item id="2">
        ...
    </item>
</playlist>

我想要获得的是:

<playlist>
    <item id="1">
        ...
    </item>
    <item id="2">
        ...
    </item>
</playlist>

然后我这样做:

oldPlaylist = $.parseXML(string1);
newPlaylist = $.parseXML(string2);
$(oldPlaylist).find('playlist').each(function(index,playlist) {
    $(newPlaylist).find('item').each(function(index2,item) {
        $(playlist).add(item);
    });
});
answer = (new XMLSerializer()).serializeToString(oldPlaylist);

但它不起作用。答案与string1相同。我可以说,通过提供的示例,每次进入第一次,每次进入第二次(然后看起来它正确地读取了两个XML)。

你怎么看?你能帮助我吗?谢谢!

2 个答案:

答案 0 :(得分:4)

根据the documentation,add方法构造一个新的jQuery对象并返回它。它实际上并不会更改您调用该方法的对象。

所以答案与string1的字符串相同是正常的。

你可以沿着这些方向做点什么:

var oldPlaylist = $.parseXML(string1);
var newPlaylist = $.parseXML(string2);
$(newPlaylist).find('item').each(function(index,item) {
    oldPlaylist = oldPlaylist.add(item);
});
answer = (new XMLSerializer()).serializeToString(oldPlaylist);

答案 1 :(得分:2)

在我看来,使用add()是错误的。它只是将项添加到匹配元素集中......它不会将新的子元素插入树中。

相反,您需要append()。并且append()实际上修改了它正在操作的对象,因此您无需将结果分配给oldPlaylist

所以我会尝试像

这样的东西
var oldPlaylist = $.parseXML(string1);
var newPlaylist = $.parseXML(string2);
$(oldPlaylist).find('playlist').each(function(index, playlist) {
    $(newPlaylist).find('item').each(function(index2, item) {
        $(playlist).append(item);
    });
});
answer = (new XMLSerializer()).serializeToString(oldPlaylist);

我对此进行了测试,并提供了所需的answer

<playlist>
  <item id="1"> ... </item>
  <item id="2"> ... </item>
</playlist>

(为了清楚起见,添加了缩进。)