如何使用JQuery/Javascript将所需的XML部分转换成变量?

如何使用JQuery/Javascript将所需的XML部分转换成变量?,javascript,jquery,xml,Javascript,Jquery,Xml,假设我有以下示例XML: <PrimaryMembers> <Member> <Name>Jessica</Name> <Hobby>Softball</Hobby> </Member> <SecondaryMembers> <Member> <Name>Wilson</Name> <Hobby>Baseball</Hobby> </M

假设我有以下示例XML:

<PrimaryMembers>
<Member>
<Name>Jessica</Name>
<Hobby>Softball</Hobby>
</Member>
<SecondaryMembers>
<Member>
<Name>Wilson</Name>
<Hobby>Baseball</Hobby>
</Member>
<Member>
<Name>John</Name>
<Hobby>Soccer</Hobby>
</Member>
</SecondaryMembers>
</PrimaryMembers>
注意:我不想存储Wilson和John。我只想要杰西卡和垒球

var members = [];
$(xml).find('Name:contains(Jessica)').each(function(){
  var member = {};
  $(this).siblings().each(function(){
    member[this.nodeName] = $(this).text();
 });
  members.push(member);
});
但是,如果XML是一种精确的表示形式,那么它看起来有soem问题。
PrimaryMembers
缺少结束标记。此外,虽然不是交易破坏者,但似乎每个
名称
/
爱好
都应该包含在
成员
元素中,而文档中并非如此

注意:我不想存储Wilson和John。我只想要杰西卡和垒球

var members = [];
$(xml).find('Name:contains(Jessica)').each(function(){
  var member = {};
  $(this).siblings().each(function(){
    member[this.nodeName] = $(this).text();
 });
  members.push(member);
});
实际上你在这里做了一个错误的假设。不能保证“杰西卡”是独一无二的,所以你可能不会只有一个结果。话虽如此,您可以执行以下操作:

function getMember(memberName){
 var properties = {};
 $(xml).find('Name:contains("'+memberName+'")').siblings().each(function(){
    properties[this.nodeName] = $(this).text();
 });
 return properties;
};

var theMember = getMember('Jessica');

您是如何存储的???JSON是更好的数据传输格式吗?我同意,但为了学习XML,我将其视为XML。您应该.find()成员对象,而不是名称。样本也可能在主样本周围有。@Emyr:应该有,但没有。。我甚至在我的回答中提到了这一点。当然值得一提,但我不知道投票结果会不会被否决。假设还有其他属性beisdes的名字和爱好,那么这样做会不会不方便:member.attribc=$(this.next('hobby')。next('C')。text();member.attribd=$(this.next('Hobby').next('C').next('D').text()@特维尔:当然。如果是这种情况,那么最好使用
element.sibbines(attrName)
或类似的东西。但是如果不知道XML的真实结构,就很难做出决定(尽管对于兄弟姐妹来说,这不会有什么区别)。如果您清理了XML并使其准确,我很高兴更新我的答案。谢谢,我已经根据您的反馈更新了XML,请告诉我您是否认为这是准确的,或者是否应该进行任何其他更改。
function getMember(memberName){
 var properties = {};
 $(xml).find('Name:contains("'+memberName+'")').siblings().each(function(){
    properties[this.nodeName] = $(this).text();
 });
 return properties;
};

var theMember = getMember('Jessica');