【问题标题】:Returning XML node text as an array using find()使用 find() 将 XML 节点文本作为数组返回
【发布时间】:2016-04-20 06:38:05
【问题描述】:

我试图弄清楚如何将 .find() 结果的子集作为数组返回。我有一个这样的 XML 文档(这是来自here 的摘录):

<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$.ajax()为上述URL返回的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 is not a function。有什么想法我在这里做错了吗?

谢谢!

【问题讨论】:

    标签: jquery arrays xml


    【解决方案1】:

    要从选定元素的属性创建数组,您可以使用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() 会产生相同的结果,但显然效率较低?
    • 就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多