使用find()方法将XML节点文本作为数组返回

3

我正在尝试找出如何将.find()的结果返回为一个数组的子集。我有一个XML文档,像这样(这是此处的摘录):

<MeshHeadingList>
    <MeshHeading>
        <DescriptorName MajorTopicYN="N" UI="D020816">Amino Acid Motifs</DescriptorName>
    </MeshHeading>
    <MeshHeading>
        <DescriptorName MajorTopicYN="N" UI="D020134">Catalytic Domain</DescriptorName>
    </MeshHeading>
    <MeshHeading>
        <DescriptorName MajorTopicYN="N" UI="D003017">Clostridium tetani</DescriptorName>
        <QualifierName MajorTopicYN="N" UI="Q000201">enzymology</QualifierName>
    </MeshHeading>
    <MeshHeading>
        <DescriptorName MajorTopicYN="N" UI="D019281">Dimerization</DescriptorName>
    </MeshHeading>
    <MeshHeading>
        <DescriptorName MajorTopicYN="N" UI="D004926">Escherichia coli</DescriptorName>
        <QualifierName MajorTopicYN="N" UI="Q000201">enzymology</QualifierName>
    </MeshHeading>
</MeshHeadingList>

我想要的是一个由所有DescriptorName元素的内部文本组成的数组。
{"Amino acid motifs", "catalytic domain", "Clostridium tetani", "Dimerization", "Escherichia coli"}

假设data是上述URL通过$.ajax()返回的XML数据,下面的代码:
$xml = $(data);
var descriptors = $xml.find("DescriptorName");
console.log(descriptors);

日志

Amino acid motifscatalytic domainClostridium tetaniDimerisationEscherichia coli

同时,通过迭代 descriptors 并尝试 console.log(descriptors[i].text()); 显示 descriptors[i].text 不是一个函数。您有什么想法我在这里做错了吗?
谢谢!
1个回答

0

你可以使用map()从选定的元素属性创建数组:

var descriptors = $xml.find("DescriptorName").map(function() {
    return $(this).text();
}).get();
console.log(descriptors); // = [ "Amino Acid Motifs", "Catalytic Domain", ... ]

同时,通过迭代描述符并尝试console.log(descriptors[i].text());指示descriptors[i].text不是一个函数。您有什么想法我在这里做错了吗?
这是因为当您使用方括号表示法访问jQuery对象(在您的descriptors变量中)时,您正在检索基础DOMElement。这没有text()方法,因此会出现错误。相反,您可以使用jQuery的eq()方法:
descriptors.eq(i).text();

那么通过迭代和使用 eq() 会得到相同的结果,但显然效率较低? - Yak
就是这样。 - Rory McCrossan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接