【问题标题】:How to parse a XML dom from a string?如何从字符串中解析 XML dom?
【发布时间】:2015-01-29 08:49:30
【问题描述】:

可以从头开始构建 XML DOM:

var data = document.implementation.createDocument("", "", null);
data.appendChild(data.createElement("data"));

但我找不到从字符串(不是 URL)构建 XML DOM 的方法:

var data = document.implementation.createDocument("", "", null);
data.parse_document("<data/>");

我必须从头开始编写parse_document 还是可以通过某种方式获得?

【问题讨论】:

    标签: javascript xml parsing dom


    【解决方案1】:

    从您问题中的代码来看,您似乎是在浏览器上执行此操作。

    如果是这样,您可以使用DOMParser(如果可用),回退(在 IE 上)到活动的 X 对象。

    function parseXML(str) {
        var xmlDoc, parser;
        if (window.DOMParser) {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(str, "text/xml");
        } else {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
            xmlDoc.loadXML(str);
        }
        return xmlDoc;
    }
    

    请注意,parseXML 将在无效 XML 上引发异常。

    【讨论】:

    • 我明白了。我在寻找这个函数的错误位置。
    • IE >= 9 也支持 DOMParser。
    • @ThW:因此是特征检测而不是浏览器检测。 :-)
    【解决方案2】:

    除了 T.J Crowder 的回答之外,The Definitive Guide 还包括第三个选项:

    var url = 'data:text/xml;charset=utf-8,' + encodeURIComponent(text);
    var request = new XMLHttpRequest();
    request.open('GET', url, false);
    if (request.overrideMimeType) {
        request.overrideMimeType("text/xml");
    }
    request.send(null);
    return request.responseXML;
    

    【讨论】:

    • 纯本地get请求的maximum length是什么?
    • 这是一个有趣但效率较低的解决方案,因为它需要制作请求。连接复制 XML 字符串和编码也至少一次,甚至可能不止一次。
    • @ceving 只是另一个后备。最后一个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2019-09-22
    • 2017-07-25
    相关资源
    最近更新 更多