获取XML信息

时间:2013-08-15 16:37:14

标签: javascript jquery xml

我遇到了一些紧张的问题。我找到了许多类似的问题,有些问题已经有一段时间了。所以我觉得是时候问我自己的问题了。

我使用FileReader API上传XML文件,然后将其作为字符串读取,然后查找元素和属性,如下所示:

reader.onload = function (e) {
        var Library = new String(e.target.result);
        if (window.DOMParser) {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(Library, "text/xml");
            $(xmlDoc).find('book').each(function () {

                Pages = [];
                $(this).find("page").each(function () {
                    Page = [];
                    try {
                        Page[0] = this.getAttributeNode("number").nodeValue;
                        Page[1] = this.getAttributeNode("words").nodeValue;
                    }
                    catch (err) {
                        console.log(err);
                    }
                    Pages.push(Page);
                });
            });
        }
}

我继续得到TypeError或者:

[09:11:08.523] TypeError: $(...).getAttributeNode is not a function

1 个答案:

答案 0 :(得分:1)

我不明白为什么要混合jQuery($(this).each(...))然后混合低级DOM(.getAttributeNode())。坚持使用同类jQuery:http://jsfiddle.net/kzcBE

var xmlMarkup = "<example>\n" +
                "  <book>\n" +
                "    <page number='p1' words='1104' />\n" +
                "    <page number='p2' words='1230' />\n" +
                "  </book>\n" +
                "  <book>\n" +
                "    <page number='p1' words='123' />\n" +
                "    <page number='p2' words='145' />\n" +
                "  </book>\n" +
                "</example>";

var Library = new String(xmlMarkup);
if (window.DOMParser) {
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(Library, "text/xml");
    $(xmlDoc).find('book').each(function () {
        $(this).find("page").each(function () {
            var numberAttr = $(this).attr("number");
            var wordsAttr = $(this).attr("words");
            console.log("page number: " + numberAttr);
            console.log("word count: " + wordsAttr);
        });
    });
}